IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

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

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

C#'da, ObservableCollection, dinleyicileri öğeler eklendiğinde, kaldırıldığında veya değiştirildiğinde otomatik olarak bilgilendiren 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ı dinamik PDF'ler üretmek için kullanılabilir.

IronPDF, C#'ta PDF oluşturmak için sağlam bir kütüphanedir. HTML-to-PDF dönüştürme kabiliyetleri ile, ister fatura, ister rapor veya gerçek zamanlı veriye dayalı başka belgeler oluşturmanız gerekse, yüksek kaliteli PDF'ler oluşturmanız kolaydır. Bu makalede, ObservableCollection sınıfını IronPDF ile entegre ederek, veri değiştiğinde dinamik olarak güncellenen bir PDF oluşturmak için veri bağlamayı nasıl kullanacağınızı göstereceğiz.

ObservableCollection Anlama

ObservableCollection Nedir?

ObservableCollection, C#'da öğeler eklendiğinde, kaldırıldığında veya değiştirildiğinde bildirimler sağlayan INotifyCollectionChanged arayüzünü uygulayan bir sınıftır. WPF gibi kullanıcı arayüzü uygulamalarında veri bağlama için yaygın olarak kullanılır, burada koleksiyondaki değişiklikler kullanıcı arayüzünde otomatik olarak tetiklenir. List gibi diğer koleksiyonlardan farklı olarak, bir ObservableCollection, verilerin gerçek zamanlı yansıtılması gerektiği senaryolar için mükemmel olan yerleşik olay bildirimleri sunar.

ObservableCollection, tüm koleksiyondaki değişiklikleri otomatik olarak yönetir, dinamik veri koleksiyonunu uygulamanızda yönetmeyi ve görüntülemeyi kolaylaştırır.

Yaygın Kullanım Alanları

  • Kullanıcı arayüzü bileşenleriyle bağlama: Örneğin, WPF'de ObservableCollection genellikle ListView, DataGrid ve ComboBox gibi kontrol elemanlarına veri bağlamak için kullanılır. Altındaki koleksiyon değiştiğinde, kullanıcı arayüzü otomatik olarak güncellenir.
  • Gerçek zamanlı güncellemeler: Veri sıkça değiştiğinde, ObservableCollection kullanıcı arayüzünün her zaman senkronize olmasını sağlar. Örneğin, yeni veri girdilerinin gerçek zamanlı olarak koleksiyona eklendiği ve raporun buna uygun şekilde güncellendiği bir canlı rapor için kullanabilirsiniz.
  • Dinamik değişiklikler: Uygulamanız kullanıcıların veri ekleyebileceği, silebileceği veya değiştirebileceği durumda, ObservableCollection bu değişiklikleri kullanıcı arayüzünde veya diğer bileşenlerde otomatik olarak yansıtabilir.

IronPDF ile Çalışmak

IronPDF Genel Bakış

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

Bu makalenin başında mentioned, IronPDF, PDF dokümanlarını oluşturan, düzenleyen ve işleyen bir .NET PDF üretme kütüphanesidir. Bazı diğer PDF kütüphanelerinden farklı olarak, IronPDF, HTML'yi PDF'ye dönüştürme, filigran ekleme, mevcut PDF'lerle oynama gibi PDF'lerle çalışmayı basitleştiren zengin özellik seti sunar.

IronPDF ayrıca geliştiricilerin HTML, görüntüler ve düz metin gibi farklı veri kaynaklarından PDF sunmalarına izin verir, bu da dinamik veriyi sunmanız gerektiğinde oldukça kullanışlı olabilir. IronPDF'nin API'si ile detaylı düzen, tablolar, görüntüler ve stiller içeren yüksek kaliteli PDF'ler oluşturabilirsiniz.

IronPDF Kurulumu

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

PM > Install-Package IronPdf

Yüklendikten sonra, IronPDF'yi başlatabilir ve güçlü özelliklerinden yararlanabilirsiniz. Bu makalede, dinamik verilerden PDF'ler üretmeye odaklanacağız.

ObservableCollection ile IronPDF'i Entegre Etmek

Kullanım Durumu: ObservableCollection'dan Dinamik PDF'ler Üretmek

Bir ObservableCollection içinde saklanan bir öğe listesinden bir fatura PDF'si üretmeniz gereken bir senaryoyu hayal edelim. Koleksiyona yeni öğeler eklendikçe veya kaldırıldıkça, verinin mevcut durumunu yansıtacak şekilde PDF otomatik olarak yeniden üretilmelidir.

Bu görev için, ObservableCollection, faturalardaki öğeleri yönetmek için kolay bir yol sağlarken, IronPDF bize faturayı bir PDF formatında üretme ve dışa aktarma imkanı verecektir.

PDF İçeriğine Veri Bağlama

Bir ObservableCollection'daki veriyi bir PDF'ye bağlamak için koleksiyonu döngüden geçirip öğelerini PDF içeriğine eklemeniz gerekir. IronPDF, veriyi yapılandırılmış bir formatta temsil etmeyi kolaylaştıran tablo oluşturma, metin ekleme ve düzeni özelleştirme yöntemleri sağlar.

Örneğin, birkaç öğeniz olan bir faturanızı varsa, ObservableCollection'ı döngüden geçirip her bir öğeyi belgeye bir tabloya veya listeye ekleyerek PDF'yi dinamik olarak oluşturabilirsiniz. IronPDF, yazı tiplerini, kenarlıkları ayarlama ve hatta logolar veya barkodlar gibi görüntüler ekleme dahil yüksek düzeyde özelleştirme sağlar.

Örnek Bir: ObservableCollection Kullanarak PDF Oluşturma

Bunun nasıl çalıştığını göstermek için basit bir örneğe bakalım. Bir kişi koleksiyonunuz (Person sınıfıyla temsil edilir) olduğunu ve bu kişilerin ayrıntılarını yansıtan bir PDF oluşturmak istediğinizi varsayalım. Koleksiyona yeni bir kişi eklediğinizde, PDF otomatik olarak güncellenecektir.

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

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Bu durumda, Person sınıfı Ad ve Yaş gibi temel özellikler içerir. Bu sınıfı, ObservableCollection ile birlikte PDF'yi dinamik olarak 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 }
};

Bu ObservableCollection, her biri bir Ad ve Yaş'a sahip Person nesneleri koleksiyonunu içerir. Bir öğe eklendiğinde veya kaldırıldığında, olay işleyicileri tetiklenir ve bunları PDF'yi dinamik olarak güncelleştirmek için kullanacağız.

Koleksiyon Değişiklikleri İçin Olay İşleyiciler Eklemek

Bu örnekte, koleksiyon değiştiğinde PDF'yi otomatik olarak yeniden üretmek için ObservableCollection sınıfı'nın CollectionChanged olayına abone oluyoruz. Bu, bir Person nesnesi eklemek veya kaldırmak gibi değişikliklere yanıt vermeniz gerekiyorsa 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);
};

Koleksiyona Yeni Kişi Ekleme

Koleksiyona yeni bir Kişi ekleyebilir ve tüm koleksiyon PDF'yi yeniden üretmek için olay işleyiciyi tetikler. Bu yaklaşım, tüm kişi listesinin değişikliklerini otomatik olarak işler.

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

Koleksiyona her yeni bir kişi eklediğinizde, yeni kaydı içeren PDF yeniden oluşturulur.

Yaş Özelliğini Bağlama

Bir kişinin yaş özelliğini, kullanıcı arayüzü veya uygulamanın diğer bölümleri gibi harici bir sisteme bağlayarak değişikliklerin otomatik olarak yansımasını sağlayabilirsiniz.

İşte Person 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
        }
    }
}

Bağlama İle ObservableCollection Kullanma

Binding age'ı bir kullanıcı arayüzü öğesine bağlamayı, yaş değerini güncellemeyi ve koleksiyondaki değişikliklerin nasıl yansıtıldığını gözlemlemeyi gösterelim:

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();

IronPDF ile PDF Oluşturma

Artık ObservableCollection'ı ayarlayıp olay işleyicilerine ekledikten sonra, dinamik kişi koleksiyonunu yansıtan bir PDF oluşturma 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");
}

Örnek İki: ObservableCollection'dan PDF Faturası oluşturma

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

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

Bu sınıf, ürün adı, miktar, fiyat ve toplam fiyat için özellikleri olan faturadaki bir öğeyi 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;
}

Adım 2: Örnek ObservableCollection

Bu örnek, birkaç fatura öğesi içeren bir ObservableCollection başlatır. Bu koleksiyondaki öğeleri dinamik olarak ekleyebilir, kaldırabilir 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 }
};

Adım 3: IronPDF ile PDF Oluşturma

Burada PDF'yi oluşturmak için bir fonksiyon oluşturuyoruz. Bu fonksiyon, ObservableCollection'daki verileri kullanır ve IronPDF kullanılarak PDF olarak oluşturulan HTML'ye dönüştürür.

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");
}

Adım 4: CollectionChanged Etkinliğine Abone Olma

ObservableCollection değişiklikleri otomatik olarak bildirdiğinden, koleksiyon güncellendiğinde PDF'yi yeniden oluşturmak kolaydır. Örneğin, bir öğe eklendiğinde veya kaldırıldığında, güncellenmiş verilerle PDF'yi yeniden oluşturabilirsiniz.

İşte CollectionChanged olayına nasıl abone olunabileceği ve koleksiyon değiştiğinde PDF'nin nasıl yeniden oluşturulabileceği:

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

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

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

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

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);
    }
}

Çıktı

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

Kodun Yaptığı

  • InvoiceItem class: Ürün Adı, Miktar, Fiyat ve hesaplanmış Toplamı için özelliklere sahip bir fatura öğesini temsil eder.
  • ObservableCollection: Fatura öğelerinin listelendiği yer. Koleksiyon herhangi bir değişikliği dinleyicilere otomatik olarak bilgi verir (örn., öğeler eklendiğinde veya kaldırıldığında).
  • GenerateInvoicePDF: Bu yöntem, faturayı temsil eden HTML içeriğini oluşturur ve IronPDF'yi kullanarak PDF'ye dönüştürür.
  • CollectionChanged: Koleksiyon değiştiğinde PDF'yi yeniden oluşturmak için ObservableCollection olayını işler, böylece PDF üretimi dinamik hale gelir.
  • Testing: Ana yöntem, ObservableCollection'a öğeler eklenip kaldırıldığında PDF'nin yeniden üretimini nasıl tetiklediğini gösterir.

Performans Dikkat Edilecek Hususlar

Büyük Koleksiyonları Yönetme

Büyük ObservableCollection örnekleriyle çalışırken, performans bir endişe kaynağı haline gelebilir. Koleksiyon değiştikçe PDF'nin her seferinde yeniden üretilmesi, çok sayıda öğe varsa kaynak yoğun olabilir. Bunu azaltmak için, güncellemeleri toplamak veya PDF üretim sürecini aşırı yüklememek için sayfalama gibi teknikler kullanmayı düşünün.

Verimli PDF İşleme

PDF işlemesinin verimli olmasını sağlamak için, aşağıdaki ipuçlarını aklınızda bulundurun:

  • Gereksiz yeniden işleme işlemlerini minimize edin: PDF'yi yalnızca veri önemli ölçüde değiştiğinde (örn., öğe eklendiğinde veya kaldırıldığında) yeniden oluşturun.
  • Tablo düzenini optimize edin: Büyük veri kümeleri işlenirken, bunları daha küçük ve daha yönetilebilir bölümlere ayırarak işleme süresini iyileştirin.
  • Önbellek kullanın: Statik veya seyrek değişen veriler için önceden üretilmiş PDF'leri önbelleğe alın.

Sonuç

C#'ın ObservableCollection'ı ile IronPDF'yi birleştirerek, uygulamanızın verilerindeki gerçek zamanlı değişiklikleri yansıtan dinamik PDF'ler oluşturabilirsiniz. İster fatura, rapor, isterse başka belgeler üretirken, bu yaklaşım alttaki koleksiyon değiştiğinde PDF içeriğinin otomatik olarak güncellenmesine olanak tanır.

ObservableCollection entegrasyonu, uygulamanızın minimum çabayla her zaman güncel olmasını sağlarken, IronPDF yüksek kaliteli PDF'leri oluşturmanın tüm ağır işlerini üstlenir. Bu makalede tartışılan en iyi uygulama ve performans ipuçlarını takip ederek, .NET uygulamalarınız için kesintisiz bir PDF üretim deneyimi yaratabilirsiniz.

IronPDF'yi kendiniz denemek ister misiniz? C# PDF projelerinizi yükseltmek için bugün ücretsiz deneme sürümünü indirin ve bu kütüphaneyi daha fazla eylemde görmek için geniş kapsamlı dokümantasyon bölümünü incelemeyi unutmayın.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez