WPF Windows Uygulamalarında Pencereler Arası Veri İletişimi

WPF Windows Uygulamalarında Pencereler Arası Veri İletişimi

WPF Windows uygulamalarında klasik Windows uygulamalarında olduğu gibi birden çok pencere açarak kullanıcıların farklı pencerelerde aynı anda işlem yapmalarını sağlayabilirsiniz. Bu işlemler yapılırken iki veya daha fazla pencere arasında gerçek zamanlı olarak veri aktarımı gerekebilir. Bu tip bir durumda WPF uygulamalarında kullanabileceğimiz Application objesi yardımımıza yetişiyor. Uygulama içerisindeki tüm XAML sayfaları ve Classlar Application objesine erişerek herhangi bir tipteki objeyi, değişkeni kaydedebilir veya okuyabilir. Bir örnek ile bu işlemleri nasıl yapabileceğimizi inceleyelim.

Ön Hazırlık

Visual Studio ile WPF uygulamaları yaratabilmek için sistemimizde .NET Framework 3.0 ve gerekli Visual Studio Extension"larının kurulu olması gerekiyor. Yükleme paketlerini aşağıdaki linklerden indirebilirsiniz.

http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=enhttp://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&displaylang=en

Uygulama Açılışında Birden Çok Pencere Açmak

Visual Studio 2005 içerisinde yeni bir WPF Windows uygulaması başlatıyoruz. WPF Windows uygulamaları ilk açıldıklarında varsayılan pencereyi yüklerler. Bunun yanı sıra isterseniz farklı pencereleri de uygulama açılışında açabilirsiniz. Gerekli kodları yazmak üzere projemize ait App.xaml dosyasını açıyoruz.

" Interaction logic for App.xaml Partial Public Class App     Inherits System.Windows.Application       Private Sub App_Startup(ByVal sender As Object, ByVal e As System.Windows.StartupEventArgs) Handles Me.Startup         Dim x As New Window2         x.Show()     End Sub End Class

Yukarıdaki kodumuzda Application"a ait StartUp durumunu kullanıyoruz. Uygulama ilk başlatıldığında Window2 adındaki penceremizden bir adet yaratarak kullanıcıya gösteriyoruz. Bu şekilde birden çok pencereyi uygulamanın ilk başında açmak mümkün. Açtığımız bu pencere kapatıldığında uygulamamızın da kapatılmasını istiyorsak söz konusu pencerelere aşağıdaki kodu yazmamız gerekecek.

    Private Sub Window2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Closing         Application.Current.Shutdown()     End Sub

Window2"ye ait Closing durumuna yazdığımız kod ile uygulamamızın tamamen kapatılmasını sağlıyoruz. Şimdi gelelim bu iki pencereyi birbiri ile konuşturmaya.

Farklı Pencerelerin İletişimi

Uygulalamızda ilk açılan pencere olan Window1 içerisinde aşağıdaki Class yapısını tanımlayalım.

    Public Class Adam         Dim _Adi As String         Dim _Soyadi As String           Property Adi() As String             Get                 Return _Adi             End Get             Set(ByVal value As String)                 _Adi = value             End Set         End Property           Property Soyadi() As String             Get                 Return _Soyadi             End Get             Set(ByVal value As String)                 _Soyadi = value             End Set         End Property           Sub New()           End Sub           Sub New(ByVal Adi As String, ByVal Soyadi As String)             Me.Adi = Adi             Me.Soyadi = Soyadi         End Sub     End Class

Adam adındaki bu Class yapısı üzerinden bir adam değişkeni tanımlayacağız. Adam yapısına ait Adi ve Soyadi özelliklerine farklı değerler aktardıktan sonra bu yapıyı başka bir pencereyle paylaşacağız. İlk olarak gelin Window1"e ait XAML koduna bakalım.

Veri girişi yapacağımız WPF penceresi.

                 

Penceremizde iki adet TextBox ve bir adet Button bulunuyor. Düğmeye tıklandığında aşağıdaki kod çalışarak kutular içerisinde yazan bilgiler çerçevesinde bir adam değişkeni yaratacak ve adını, soyadını belirleyecek. Sonrasında da sihirli kodumuzu kullanarak Application Class"ı ile veriyi kaydedecek.

    Private Sub Kaydet_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click         Dim YeniAdam As New Adam(TextBox1.Text, TextBox2.Text)         If Application.Current.Properties.Contains("Sahip") = False Then             Application.Current.Properties.Add("Sahip", YeniAdam)         Else             Application.Current.Properties.Item("Sahip") = YeniAdam         End If    End Sub

Kodumuzda YeniAdam adındaki değişkenimizi yarattıktan sonra Application.Current diyerek mevcut uygulamayı yakalıyoruz. Mevcut uygulamanın Properties listesine farklı isimler vererek kayıtlar koyabiliriz. Bizim kaydımızın ismi Sahip olacak. Kayıt daha önce varsa sadece değiştiriyoruz. .Contains metodu ile kaydın daha önce eklenip eklenmediğini kontrol edebilirsiniz.

Kaydetme işlemimiz tamamlandığında göre Window2 penceremize ait XAML kodunu inceleyerek çalışmalarımıza Window2 üzerinde devam edelim.

         

Window2 içerisinde sadece bir adet Button var. Düğmeye tıkladığımızda Window1 tarafından kaydedilen bilgiyi okuyarak kullanıcıya birer mesaj kutusu ile basit bir şekilde göstereceğiz. Kodumuz aşağıdaki şekilde olacak.

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click         MessageBox.Show(Application.Current.Properties.Item("Sahip").adi)         MessageBox.Show(Application.Current.Properties.Item("Sahip").soyadi)     End Sub

Gördüğünüz gibi yine Application.Current diyerek uygulamamızın tüm Properties listesine ulaşabiliyoruz. Burada Sahip adındaki bilgiyi alarak aldığımız kişi değişkeninin Adi ve Soyadi özelliklerine ulaşabiliyoruz. Böylece her iki pencere de açıkken birinde yapılan değişiklikler kaydedilebilirken diğerinden de direk okunabilir veya her iki pencere de aynı obje üzerinde değişiklikler yapabilir. Değişiklikerin pencereler tarafından algılanmasını isterseniz Actived durumlarında Application üzerinden veriler tekrar alabilirsiniz.

Döküman Arama

Başlık :

Kapat