Altbilgi içeriğine atla
.NET YARDıM

C# ObservableCollection (Geliştiriciler için Nasıl Çalışır)

C#'ta ObservableCollection, öğeler eklendiğinde, kaldırıldığında veya değiştirildiğinde dinleyicilere otomatik olarak bildirimde bulunan güçlü bir veri yapısıdır. Özellikle, kullanıcı arayüzünüzde veya raporlarınızda gerçek zamanlı değişiklikleri yansıtmanız gerektiğinde dinamik veri toplama senaryoları için kullanışlıdır. IronPDF ile birleştirildiğinde, bu güçlü koleksiyon, canlı verilere dayalı olarak dinamik PDF'ler oluşturmak için kullanılabilir.

IronPDF, C#'da PDF'ler oluşturmak için sağlam bir kütüphanedir. HTML'den PDF'e dönüştürme yetenekleriyle, faturalar, raporlar veya gerçek zamanlı verilere dayalı diğer belgeleri üretmek istediğinizde yüksek kaliteli PDF'ler oluşturması kolaydır. Bu makalede, IronPDF ile ObservableCollection sınıfını entegre ederek, veri bağlamayı kullanarak veri değiştikçe dinamik olarak güncellenen bir PDF oluşturmayı nasıl yapabileceğinizi göstereceğiz.

ObservableCollection Anlamak

ObservableCollection Nedir?

ObservableCollection, C#'ta, öğeler eklendiğinde, kaldırıldığında veya değiştirildiğinde bildirim sağlayan INotifyCollectionChanged arayüzünü uygulayan bir sınıftır. Genellikle WPF gibi kullanıcı arayüzü uygulamalarında veri bağlaması için kullanılır, burada koleksiyondaki değişiklikler otomatik olarak kullanıcı arayüzünü günceller. List gibi diğer koleksiyonların aksine, bir ObservableCollection yerleşik olay bildirimleri sunar ve verilerin gerçek zamanlı yansıtılması gereken senaryolar için mükemmeldir.

ObservableCollection tüm koleksiyondaki değişiklikleri otomatik olarak ele alır, bu da uygulamanızda dinamik veri toplamanın yönetimini ve gösterimini kolay hale getirir.

Yaygın Kullanım Durumları

  • Kullanıcı arayüzü bileşenleriyle bağlama: Örneğin, WPF'de, ObservableCollection genellikle ListView, DataGrid ve ComboBox gibi kontrollerle veri bağlaması için kullanılır. Temel koleksiyon değiştiğinde, kullanıcı arayüzü otomatik olarak güncellenir.
  • Gerçek zamanlı güncellemeler: Veri sık sık değiştiğinde, ObservableCollection kullanıcı arayüzünün her zaman senkronize olmasını sağlar. Örneğin, yeni veri girişlerinin gerçek zamanlı olarak koleksiyona eklendiği ve raporun buna göre güncellendiği bir canlı rapor için kullanabilirsiniz.
  • Dinamik değişiklikler: Uygulamanız kullanıcıların veri eklemesine, silmesine veya değiştirmesine izin veriyorsa, ObservableCollection bu değişiklikleri kullanıcı arayüzünde veya diğer bileşenlerde otomatik olarak yansıtmak için kullanılabilir.

IronPDF ile Çalışmak

IronPDF'in Genel Bakışı

C# ObservableCollection (Geliştiriciler için Nasıl Çalışır): Şekil 1

Bu makalenin başında belirttiğimiz gibi, IronPDF, PDF belgeleri oluşturmayı, değiştirmeyi ve oluşturmayı kolaylaştıran bir .NET PDF oluşturma kütüphanesidir. Diğer bazı PDF kütüphanelerine kıyasla, IronPDF, HTML'den PDF'e dönüştürme, damga ekleme, mevcut PDF'leri manipüle etme ve daha fazlası gibi PDF'lerle çalışmayı kolaylaştıran zengin bir dizi özellik sunar.

IronPDF ayrıca geliştiricilerin, dinamik verilerin sunulması gerektiğinde kullanışlı olan HTML, resimler ve düz metin gibi farklı veri kaynaklarından PDF'ler oluşturmasına olanak tanır. IronPDF'nin API'si, detaylı düzenler, tablolar, resimler ve stiller dahil yüksek kaliteli PDF'ler oluşturmanıza olanak tanır.

IronPDF Kurulumu

IronPDF ile başlamanız için kütüphaneyi NuGet üzerinden yüklemeniz gerekir. Bu komutu Paket Yöneticisi Konsolunda çalıştırarak projenize ekleyebilirsiniz:

Install-Package IronPdf

Yüklendikten sonra, IronPDF'yi başlatabilir ve güçlü özelliklerini kullanabilirsiniz. Bu makale için, bir ObservableCollection'daki dinamik verilerden PDF oluşturma üzerinde duracağız.

ObservableCollection ile IronPDF Entegrasyonu

Kullanım Durumu: ObservableCollection'dan Dinamik Olarak PDF Oluşturma

Bir ObservableCollection içinde saklanan bir öğe listesinden fatura PDF'si oluşturma senaryosunu hayal edelim. Öğeler koleksiyona eklendiğinde veya kaldırıldığında, mevcut veri durumunu yansıtmak için PDF otomatik olarak yeniden üretilmelidir.

Bu görev için, ObservableCollection faturadaki öğeleri yönetmenin kolay bir yolunu sunarken, IronPDF faturayı PDF formatında oluşturup dışa aktarmamıza olanak tanır.

Verileri PDF İçeriğine Bağlama

Bir ObservableCollection'daki verileri bir PDF'e bağlamak için, koleksiyondan geçip öğelerini PDF içeriğine eklemeniz gerekir. IronPDF, veriyi yapısal bir formatta temsil etmeyi kolaylaştıran tablolar oluşturma, metin ekleme ve düzeni özelleştirme yöntemleri sunar.

Örneğin, birkaç öğe içeren bir faturanız varsa, ObservableCollection'dan geçerek her öğeyi belgeye bir tablo veya liste olarak ekleyerek PDF'i dinamik olarak oluşturabilirsiniz. IronPDF, yazı tiplerini, kenarlıkları ayarlama ve logolar veya barkodlar gibi resimleri dahil etme gibi yüksek düzeyde özelleştirme sağlar.

Örnek Bir: ObservableCollection kullanarak PDF oluşturma

Bu sistemin nasıl çalıştığını göstermek için basit bir örneğe bakalım. Kişi sınıfı ile temsil edilen bir insan koleksiyonunuz olduğunu ve bu insanların ayrıntılarını yansıtan bir PDF oluşturmak istediğinizi varsayalım. Koleksiyona yeni bir kişi eklendiğinde, PDF otomatik olarak güncellenir.

Kişi Sınıfı Örneği

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Public Class Person
	Public Property Name() As String
	Public Property Age() As Integer
End Class
$vbLabelText   $csharpLabel

Bu durumda, Kişi sınıfı Ad ve Yaş gibi temel özellikler içerir. Bu sınıfı, ObservableCollection ile birlikte dinamik olarak bir PDF oluşturmak için kullanacağız.

ObservableCollection Oluşturma

using System.Collections.ObjectModel;

var collection = new ObservableCollection<Person>
{
    new Person { Name = "John Doe", Age = 30 },
    new Person { Name = "Jane Smith", Age = 28 }
};
using System.Collections.ObjectModel;

var collection = new ObservableCollection<Person>
{
    new Person { Name = "John Doe", Age = 30 },
    new Person { Name = "Jane Smith", Age = 28 }
};
Imports System.Collections.ObjectModel

Private collection = New ObservableCollection(Of Person) From {
	New Person With {
		.Name = "John Doe",
		.Age = 30
	},
	New Person With {
		.Name = "Jane Smith",
		.Age = 28
	}
}
$vbLabelText   $csharpLabel

Bu ObservableCollection, her biri bir Ad ve Yaş içeren Kişi nesnelerinin bir koleksiyonunu içerir. Bir öğe eklendiğinde veya çıkarıldığında, olay işleyicileri tetiklenir ve PDF'yi dinamik olarak güncellemek için kullanacağız.

Koleksiyon Değişiklikleri İçin Olay İşleyicileri Ekleme

Bu örnekte, koleksiyon değiştiğinde otomatik olarak PDF'yi yeniden oluşturmak için ObservableCollection sınıfının CollectionChanged olayına abone oluruz. Bu, bir Kişi nesnesi ekleme veya çıkarma gibi değişikliklere yanıt vermeniz gerektiğinde kullanışlıdır.

// Subscribe to the ObservableCollection's CollectionChanged event
collection.CollectionChanged += (object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) =>
{
    // Regenerate the PDF whenever the collection changes
    GeneratePersonPDF(collection);
};
// Subscribe to the ObservableCollection's CollectionChanged event
collection.CollectionChanged += (object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) =>
{
    // Regenerate the PDF whenever the collection changes
    GeneratePersonPDF(collection);
};
' Subscribe to the ObservableCollection's CollectionChanged event
AddHandler collection.CollectionChanged, Sub(sender As Object, e As System.Collections.Specialized.NotifyCollectionChangedEventArgs)
	' Regenerate the PDF whenever the collection changes
	GeneratePersonPDF(collection)
End Sub
$vbLabelText   $csharpLabel

Koleksiyona Yeni Kişiler Ekleme

Koleksiyona yeni bir Kişi ekleyebilir ve tüm koleksiyon PDF'yi yeniden oluşturmak için olay işleyicisini tetikleyebilir. Bu yaklaşım, insanların tüm listesindeki değişiklikleri otomatik olarak ele alır.

// Adding a new person to the collection
collection.Add(new Person { Name = "Alice Brown", Age = 32 });
// Adding a new person to the collection
collection.Add(new Person { Name = "Alice Brown", Age = 32 });
' Adding a new person to the collection
collection.Add(New Person With {
	.Name = "Alice Brown",
	.Age = 32
})
$vbLabelText   $csharpLabel

Koleksiyona yeni bir kişi eklediğinizde, PDF yeniden oluşturulur ve yeni girişi dahil eder.

Yaş Özelliğini Bağlama

Bir Kişinin yaş özelliğini, harici bir sisteme (örneğin, UI veya uygulamanın diğer bölümleri gibi) bağlayarak, değişiklikleri otomatik olarak yansıtabilirsiniz.

İşte Kişi sınıfında: Yaş özelliğinin nasıl bağlanacağına dair bir örnek:

public class Person
{
    public string Name { get; set; }
    private int _age;
    public int Age 
    {
        get { return _age; }
        set
        {
            _age = value;
            // Raise property changed event here if using data binding
        }
    }
}
public class Person
{
    public string Name { get; set; }
    private int _age;
    public int Age 
    {
        get { return _age; }
        set
        {
            _age = value;
            // Raise property changed event here if using data binding
        }
    }
}
Public Class Person
	Public Property Name() As String
	Private _age As Integer
	Public Property Age() As Integer
		Get
			Return _age
		End Get
		Set(ByVal value As Integer)
			_age = value
			' Raise property changed event here if using data binding
		End Set
	End Property
End Class
$vbLabelText   $csharpLabel

ObservableCollection'u Bağlama ile Kullanma

Yaş bağlamayı bir UI öğesine uygulayarak yaş değerini güncellemeyi ve değişikliklerin koleksiyonda nasıl yansıtıldığını gözlemleyelim:

ObservableCollection<Person> people = new ObservableCollection<Person>
{
    new Person { Name = "John", Age = 30 },
    new Person { Name = "Jane", Age = 28 }
};
// Binding the Age of the first person to a UI element (pseudo-code)
someUIElement.Text = people[0].Age.ToString();
ObservableCollection<Person> people = new ObservableCollection<Person>
{
    new Person { Name = "John", Age = 30 },
    new Person { Name = "Jane", Age = 28 }
};
// Binding the Age of the first person to a UI element (pseudo-code)
someUIElement.Text = people[0].Age.ToString();
Dim people As New ObservableCollection(Of Person) From {
	New Person With {
		.Name = "John",
		.Age = 30
	},
	New Person With {
		.Name = "Jane",
		.Age = 28
	}
}
' Binding the Age of the first person to a UI element (pseudo-code)
someUIElement.Text = people(0).Age.ToString()
$vbLabelText   $csharpLabel

IronPDF ile PDF Oluşturma

Artık ObservableCollection'u oluşturduğumuza ve olay işleyicilerini eklediğimize göre, insanlardan oluşan dinamik koleksiyonu yansıtan bir PDF oluşturma konusuna odaklanmanın zamanı geldi.

using IronPdf;

public void GeneratePersonPDF(ObservableCollection<Person> people)
{
    var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
    // Create HTML content representing the people in the collection
    var htmlContent = "<h1>People Information</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                      "<tr><th>Name</th><th>Age</th></tr>";
    foreach (var person in people)
    {
        htmlContent += $"<tr><td>{person.Name}</td><td>{person.Age}</td></tr>";
    }

    htmlContent += "</table>";
    // Convert the HTML content to a PDF
    var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to disk
    pdfDocument.SaveAs("PeopleInformation.pdf");
}
using IronPdf;

public void GeneratePersonPDF(ObservableCollection<Person> people)
{
    var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
    // Create HTML content representing the people in the collection
    var htmlContent = "<h1>People Information</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                      "<tr><th>Name</th><th>Age</th></tr>";
    foreach (var person in people)
    {
        htmlContent += $"<tr><td>{person.Name}</td><td>{person.Age}</td></tr>";
    }

    htmlContent += "</table>";
    // Convert the HTML content to a PDF
    var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to disk
    pdfDocument.SaveAs("PeopleInformation.pdf");
}
Imports IronPdf

Public Sub GeneratePersonPDF(ByVal people As ObservableCollection(Of Person))
	Dim pdf = New ChromePdfRenderer() ' Initialize IronPDF's ChromePdfRenderer class
	' Create HTML content representing the people in the collection
	Dim htmlContent = "<h1>People Information</h1><table border='1' cellpadding='5' cellspacing='0'>" & "<tr><th>Name</th><th>Age</th></tr>"
	For Each person In people
		htmlContent &= $"<tr><td>{person.Name}</td><td>{person.Age}</td></tr>"
	Next person

	htmlContent &= "</table>"
	' Convert the HTML content to a PDF
	Dim pdfDocument = pdf.RenderHtmlAsPdf(htmlContent)
	' Save the generated PDF to disk
	pdfDocument.SaveAs("PeopleInformation.pdf")
End Sub
$vbLabelText   $csharpLabel

Örnek İki: ObservableCollection'den PDF Faturası Oluşturma

IronPDF kullanarak fatura öğelerinin ObservableCollection'ından bir PDF oluşturmanın bir örneği:

Adım 1: Örnek Fatura Öğesi Sınıfı

Bu sınıf, fatura içindeki bir öğeyi, öğe adı, miktar, fiyat ve toplam fiyat için özelliklerle temsil eder.

public class InvoiceItem
{
    public string ItemName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public decimal Total => Quantity * Price;
}
public class InvoiceItem
{
    public string ItemName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public decimal Total => Quantity * Price;
}
Public Class InvoiceItem
	Public Property ItemName() As String
	Public Property Quantity() As Integer
	Public Property Price() As Decimal
	Public ReadOnly Property Total() As Decimal
		Get
			Return Quantity * Price
		End Get
	End Property
End Class
$vbLabelText   $csharpLabel

Adım 2: Örnek ObservableCollection

Bu örnek, birkaç fatura öğesi içeren bir ObservableCollection başlatır. Bu koleksiyondaki öğeleri dinamik olarak ekleyebilir, çıkarabilir veya değiştirebilirsiniz.

ObservableCollection<InvoiceItem> invoiceItems = new ObservableCollection<InvoiceItem>
{
    new InvoiceItem { ItemName = "Item 1", Quantity = 2, Price = 10.00m },
    new InvoiceItem { ItemName = "Item 2", Quantity = 1, Price = 25.00m },
    new InvoiceItem { ItemName = "Item 3", Quantity = 5, Price = 5.00m }
};
ObservableCollection<InvoiceItem> invoiceItems = new ObservableCollection<InvoiceItem>
{
    new InvoiceItem { ItemName = "Item 1", Quantity = 2, Price = 10.00m },
    new InvoiceItem { ItemName = "Item 2", Quantity = 1, Price = 25.00m },
    new InvoiceItem { ItemName = "Item 3", Quantity = 5, Price = 5.00m }
};
Dim invoiceItems As New ObservableCollection(Of InvoiceItem) From {
	New InvoiceItem With {
		.ItemName = "Item 1",
		.Quantity = 2,
		.Price = 10.00D
	},
	New InvoiceItem With {
		.ItemName = "Item 2",
		.Quantity = 1,
		.Price = 25.00D
	},
	New InvoiceItem With {
		.ItemName = "Item 3",
		.Quantity = 5,
		.Price = 5.00D
	}
}
$vbLabelText   $csharpLabel

Adım 3: IronPDF ile PDF Oluşturma

Burada, PDF oluşturmak için bir fonksiyon oluşturuyoruz. Bu fonksiyon, ObservableCollection'daki verileri kullanır ve bunları HTML'ye dönüştürür, ardından IronPDF kullanarak PDF olarak işler.

public void GenerateInvoicePDF(ObservableCollection<InvoiceItem> items)
{
    var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
    // Create HTML content representing the invoice
    var htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                      "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>";
    foreach (var item in items)
    {
        htmlContent += $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>";
    }
    htmlContent += "</table>";
    // Convert the HTML content to a PDF
    var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to disk
    pdfDocument.SaveAs("Invoice.pdf");
}
public void GenerateInvoicePDF(ObservableCollection<InvoiceItem> items)
{
    var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
    // Create HTML content representing the invoice
    var htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                      "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>";
    foreach (var item in items)
    {
        htmlContent += $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>";
    }
    htmlContent += "</table>";
    // Convert the HTML content to a PDF
    var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
    // Save the generated PDF to disk
    pdfDocument.SaveAs("Invoice.pdf");
}
Public Sub GenerateInvoicePDF(ByVal items As ObservableCollection(Of InvoiceItem))
	Dim pdf = New ChromePdfRenderer() ' Initialize IronPDF's ChromePdfRenderer class
	' Create HTML content representing the invoice
	Dim htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" & "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>"
	For Each item In items
		htmlContent &= $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>"
	Next item
	htmlContent &= "</table>"
	' Convert the HTML content to a PDF
	Dim pdfDocument = pdf.RenderHtmlAsPdf(htmlContent)
	' Save the generated PDF to disk
	pdfDocument.SaveAs("Invoice.pdf")
End Sub
$vbLabelText   $csharpLabel

Adım 4: CollectionChanged Olayına Abone Olma

ObservableCollection değişiklikleri otomatik olarak bildirdiğinden, koleksiyon güncellendiğinde kolayca PDF'yi yeniden oluşturabilirsiniz. Örneğin, bir öğe eklenirse veya çıkarılırsa, PDF güncellenmiş veriyle yeniden oluşturulabilir.

CollectionChanged olayına nasıl abone olabileceğinizi ve koleksiyon değiştiğinde PDF'yi nasıl yeniden oluşturabileceğinizi burada görebilirsiniz:

// Subscribe to the ObservableCollection's CollectionChanged event
invoiceItems.CollectionChanged += (sender, e) =>
{
    // Regenerate the PDF whenever the collection changes
    GenerateInvoicePDF(invoiceItems);
};
// Subscribe to the ObservableCollection's CollectionChanged event
invoiceItems.CollectionChanged += (sender, e) =>
{
    // Regenerate the PDF whenever the collection changes
    GenerateInvoicePDF(invoiceItems);
};
' Subscribe to the ObservableCollection's CollectionChanged event
AddHandler invoiceItems.CollectionChanged, Sub(sender, e)
	' Regenerate the PDF whenever the collection changes
	GenerateInvoicePDF(invoiceItems)
End Sub
$vbLabelText   $csharpLabel

Adım 5: Öğeleri Ekleme ve Test Etme

Artık ObservableCollection'a yeni öğeler ekleyerek ve PDF'nin otomatik olarak nasıl yeniden oluşturulduğunu gözlemleyerek test edebilirsiniz.

// Adding a new item to the ObservableCollection
invoiceItems.Add(new InvoiceItem { ItemName = "Item 4", Quantity = 3, Price = 12.50m });
// Adding a new item to the ObservableCollection
invoiceItems.Add(new InvoiceItem { ItemName = "Item 4", Quantity = 3, Price = 12.50m });
' Adding a new item to the ObservableCollection
invoiceItems.Add(New InvoiceItem With {
	.ItemName = "Item 4",
	.Quantity = 3,
	.Price = 12.50D
})
$vbLabelText   $csharpLabel

Tam Kod Örneği

using System;
using System.Collections.ObjectModel;
using IronPdf;

public class InvoiceItem
{
    public string ItemName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    // Property to calculate the total price for each item
    public decimal Total => Quantity * Price;
}
public class InvoiceGenerator
{
    // Function to generate the invoice PDF
    public void GenerateInvoicePDF(ObservableCollection<InvoiceItem> items)
    {
        var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
        // Create HTML content representing the invoice
        var htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                          "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>";
        foreach (var item in items)
        {
            htmlContent += $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>";
        }
        htmlContent += "</table>";
        // Convert the HTML content to a PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
        // Save the generated PDF to disk
        pdfDocument.SaveAs("Invoice.pdf");
    }

    // Main function to test the code
    public static void Main(string[] args)
    {
        var invoiceItems = new ObservableCollection<InvoiceItem>
        {
            new InvoiceItem { ItemName = "Item 1", Quantity = 2, Price = 10.00m },
            new InvoiceItem { ItemName = "Item 2", Quantity = 1, Price = 25.00m },
            new InvoiceItem { ItemName = "Item 3", Quantity = 5, Price = 5.00m }
        };

        var invoiceGenerator = new InvoiceGenerator();

        // Subscribe to the ObservableCollection's CollectionChanged event
        invoiceItems.CollectionChanged += (sender, e) =>
        {
            // Regenerate the PDF whenever the collection changes
            invoiceGenerator.GenerateInvoicePDF(invoiceItems);
        };

        // Generate initial PDF
        invoiceGenerator.GenerateInvoicePDF(invoiceItems);

        // Add a new item to the collection and automatically regenerate the PDF
        invoiceItems.Add(new InvoiceItem { ItemName = "Item 4", Quantity = 3, Price = 12.50m });

        // Remove an item and see the PDF update
        invoiceItems.RemoveAt(0);
    }
}
using System;
using System.Collections.ObjectModel;
using IronPdf;

public class InvoiceItem
{
    public string ItemName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    // Property to calculate the total price for each item
    public decimal Total => Quantity * Price;
}
public class InvoiceGenerator
{
    // Function to generate the invoice PDF
    public void GenerateInvoicePDF(ObservableCollection<InvoiceItem> items)
    {
        var pdf = new ChromePdfRenderer();  // Initialize IronPDF's ChromePdfRenderer class
        // Create HTML content representing the invoice
        var htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" +
                          "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>";
        foreach (var item in items)
        {
            htmlContent += $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>";
        }
        htmlContent += "</table>";
        // Convert the HTML content to a PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
        // Save the generated PDF to disk
        pdfDocument.SaveAs("Invoice.pdf");
    }

    // Main function to test the code
    public static void Main(string[] args)
    {
        var invoiceItems = new ObservableCollection<InvoiceItem>
        {
            new InvoiceItem { ItemName = "Item 1", Quantity = 2, Price = 10.00m },
            new InvoiceItem { ItemName = "Item 2", Quantity = 1, Price = 25.00m },
            new InvoiceItem { ItemName = "Item 3", Quantity = 5, Price = 5.00m }
        };

        var invoiceGenerator = new InvoiceGenerator();

        // Subscribe to the ObservableCollection's CollectionChanged event
        invoiceItems.CollectionChanged += (sender, e) =>
        {
            // Regenerate the PDF whenever the collection changes
            invoiceGenerator.GenerateInvoicePDF(invoiceItems);
        };

        // Generate initial PDF
        invoiceGenerator.GenerateInvoicePDF(invoiceItems);

        // Add a new item to the collection and automatically regenerate the PDF
        invoiceItems.Add(new InvoiceItem { ItemName = "Item 4", Quantity = 3, Price = 12.50m });

        // Remove an item and see the PDF update
        invoiceItems.RemoveAt(0);
    }
}
Imports System
Imports System.Collections.ObjectModel
Imports IronPdf

Public Class InvoiceItem
	Public Property ItemName() As String
	Public Property Quantity() As Integer
	Public Property Price() As Decimal
	' Property to calculate the total price for each item
	Public ReadOnly Property Total() As Decimal
		Get
			Return Quantity * Price
		End Get
	End Property
End Class
Public Class InvoiceGenerator
	' Function to generate the invoice PDF
	Public Sub GenerateInvoicePDF(ByVal items As ObservableCollection(Of InvoiceItem))
		Dim pdf = New ChromePdfRenderer() ' Initialize IronPDF's ChromePdfRenderer class
		' Create HTML content representing the invoice
		Dim htmlContent = "<h1>Invoice</h1><table border='1' cellpadding='5' cellspacing='0'>" & "<tr><th>Item</th><th>Quantity</th><th>Price</th><th>Total</th></tr>"
		For Each item In items
			htmlContent &= $"<tr><td>{item.ItemName}</td><td>{item.Quantity}</td><td>{item.Price:C}</td><td>{item.Total:C}</td></tr>"
		Next item
		htmlContent &= "</table>"
		' Convert the HTML content to a PDF
		Dim pdfDocument = pdf.RenderHtmlAsPdf(htmlContent)
		' Save the generated PDF to disk
		pdfDocument.SaveAs("Invoice.pdf")
	End Sub

	' Main function to test the code
	Public Shared Sub Main(ByVal args() As String)
		Dim invoiceItems = New ObservableCollection(Of InvoiceItem) From {
			New InvoiceItem With {
				.ItemName = "Item 1",
				.Quantity = 2,
				.Price = 10.00D
			},
			New InvoiceItem With {
				.ItemName = "Item 2",
				.Quantity = 1,
				.Price = 25.00D
			},
			New InvoiceItem With {
				.ItemName = "Item 3",
				.Quantity = 5,
				.Price = 5.00D
			}
		}

'INSTANT VB NOTE: The variable invoiceGenerator was renamed since it may cause conflicts with calls to static members of the user-defined type with this name:
		Dim invoiceGenerator_Conflict As New InvoiceGenerator()

		' Subscribe to the ObservableCollection's CollectionChanged event
		AddHandler invoiceItems.CollectionChanged, Sub(sender, e)
			' Regenerate the PDF whenever the collection changes
			invoiceGenerator_Conflict.GenerateInvoicePDF(invoiceItems)
		End Sub

		' Generate initial PDF
		invoiceGenerator_Conflict.GenerateInvoicePDF(invoiceItems)

		' Add a new item to the collection and automatically regenerate the PDF
		invoiceItems.Add(New InvoiceItem With {
			.ItemName = "Item 4",
			.Quantity = 3,
			.Price = 12.50D
		})

		' Remove an item and see the PDF update
		invoiceItems.RemoveAt(0)
	End Sub
End Class
$vbLabelText   $csharpLabel

Çıktı

C# ObservableCollection (Geliştiriciler için Nasıl Çalışır): Şekil 2 - Çıktı PDF dosyası

Kod Ne Yapar

  • FaturaÖgesi sınıfı: ÖğeAdı, Miktar, Fiyat ve toplam hesaplanan özelliklere sahip bir fatura öğesini temsil eder.
  • ObservableCollection: Fatura öğelerinin listesini saklamak için kullanılır. Koleksiyon, dinleyicilere otomatik olarak her türlü değişiklik hakkında bilgi verir (örneğin, öğeler eklendiğinde veya çıkarıldığında).
  • FaturaPDFOluştur: Bu yöntem, faturayı temsil eden HTML içeriğini oluşturur ve IronPDF'yi kullanarak bunu PDF'ye dönüştürür.
  • CollectionChanged: Koleksiyon değiştikçe PDF'yi yeniden oluşturmak için ObservableCollection olayı ele alınır, böylece PDF oluşturma dinamik hale gelir.
  • Test Etme: Ana yöntem, ObservableCollection'a öğe ekleme ve çıkarma işlemini ve bunun PDF'nin yeniden oluşturulmasını nasıl tetiklediğini gösterir.

Performans Dikkat Edilecek Noktalar

Büyük Koleksiyonları Yönetme

Büyük ObservableCollection örnekleriyle çalışırken, performans bir endişe olabilir. Koleksiyon her değiştiğinde PDF'yi yeniden oluşturmak, çok fazla öğe varsa kaynak tüketici olabilir. Bunu azaltmak için güncellemeleri gruplandırmayı veya PDF üretim sürecini aşırı yüklemesini önlemek için sayfalama gibi teknikleri kullanmayı düşünün.

Verimli PDF İşleme

PDF işlemenin verimli olmasını sağlamak için aşağıdaki ipuçlarını unutmayın:

  • Gereksiz yeniden işlemleri en aza indirin: Sadece veri önemli ölçüde değiştiğinde (örneğin, öğeler eklendiğinde veya çıkarıldığında) PDF'yi yeniden oluşturun.
  • Tablo yerleşimini optimize et: Büyük veri setlerini işlerken, işleme süresini iyileştirmek için bunları daha küçük, yönetilebilir bölümlere ayırın.
  • Önbellek kullanın: Statik veya nadiren değişen veriler için daha önce oluşturulmuş PDF'leri önbelleğe alın.

Sonuç

C#'ın ObservableCollection'u ile IronPDF'yi birleştirerek, uygulamanızın verilerindeki gerçek zamanlı değişiklikleri yansıtan dinamik PDF'leri kolayca üretebilirsiniz. Faturalar, raporlar veya diğer belgeleri oluştururken, bu yaklaşım, altta yatan koleksiyon değiştiğinde PDF içeriğini otomatik olarak güncellemeye olanak tanır.

ObservableCollection'un entegrasyonu, uygulamanızın en az çabayla her zaman güncel olmasını sağlarken, IronPDF yüksek kaliteli PDF'lerin oluşturulmasını halleder. Bu makalede tartışılan en iyi uygulamaları ve performans ipuçlarını takip ederek, .NET uygulamalarınız için sorunsuz bir PDF oluşturma deneyimi yaratabilirsiniz.

IronPDF'yi kendiniz denemek ister misiniz? Bugün ücretsiz deneme indirin ve C# PDF projelerinizi yükseltin, ve daha fazla eylemde görmek için geniş dokümantasyon bölümüne göz atmayı unutmayın.

Sıkça Sorulan Sorular

C#'da ObservableCollection nedir?

ObservableCollection, C#'da INotifyCollectionChanged arayüzünü uygulayan bir sınıftır. Öğeler eklendiğinde, kaldırıldığında veya değiştirildiğinde bildirimlerde bulunur, bu da gerçek zamanlı güncellemelerin gerektiği UI uygulamalarında veri bağlama için idealdir.

Dinamik verilerden C#'da PDF nasıl üretebilirim?

IronPDF kullanarak, C#'ın ObservableCollection'ını kullanarak dinamik verilerden PDF'ler oluşturabilirsiniz. Koleksiyon güncellendikçe, mevcut veri durumunu yansıtmak için PDF'yi otomatik olarak yeniden üretebilirsiniz.

ObservableCollection ile PDF oluşturmanın faydaları nelerdir?

ObservableCollection, gerçek zamanlı veri takibi sağlar ve canlı veri değişikliklerini yansıtması gereken PDF'ler üretirken faydalıdır. IronPDF ile birleştirildiğinde, veri güncellemelerinin PDF çıktılarına hızla yansıtılmasını sağlar.

Bir ObservableCollection'daki verileri C#'da bir PDF'ye nasıl bağlarsınız?

Bir ObservableCollection'daki verileri yineleme yaparak ve IronPDF'in metodlarını kullanarak PDF'ye yapılandırılmış öğeler olarak (örneğin tablolar veya listeler) ekleyerek bağlayabilirsiniz. Bu, PDF içeriğinin her zaman verilerle senkronize olmasını sağlar.

C#'da ObservableCollection ile PDF oluşturmanın yaygın bir kullanımı nedir?

Yaygın bir kullanım, bir öğe koleksiyonundan oluşan ObservableCollection'dan fatura üretmektir. Koleksiyona öğeler eklendikçe veya çıkarıldıkça, PDF faturası yeniden oluşturulabilir ve öğelerin güncel listesini doğru şekilde yansıtarak güncel dokümantasyonu sağlar.

IronPDF, C#'da HTML'den PDF'ye dönüşümü nasıl ele alır?

IronPDF, web sayfalarından veya HTML dizelerinden PDF'ler oluşturmak için RenderHtmlAsPdf ve RenderHtmlFileAsPdf gibi yöntemleri kullanarak HTML'yi PDF'ye dönüştürebilir, bu da dinamik içerik oluşturmayı kolaylaştırır.

PDF oluşturmak için büyük ObservableCollection'lar ile çalışırken neler dikkate alınmalı?

Büyük koleksiyonlar ile çalışırken, sayfalama kullanmayı, toplu güncellemeleri ve performans sorunlarını önlemek için düzeni optimize etmeyi göz önünde bulundurun. IronPDF'in önbellekleme ve render optimizasyonları da büyük verileri etkin bir şekilde yönetmeye yardımcı olabilir.

IronPDF, .NET uygulamalarında verimliliği nasıl artırır?

IronPDF, ayrıntılı düzen özelleştirmeleri, HTML'den PDF'ye dönüştürme ve çeşitli veri kaynakları ile entegrasyon gibi güçlü özellikler sunarak verimliliği artırır. Karmaşık PDF görevlerini basitleştirir, bu sayede geliştiriciler temel uygulama mantığına odaklanabilir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara