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

0 dakikada yazıldı

12431 defa okundu

Düzenle

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=en[\

http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&displaylang=en](http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&displaylang=en "Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP")

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 yaptığımız WPF penceremiz.
Veri girişi yapacağımız WPF penceresi.\

<Window
x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF_Demo"
Height="165" Width="301"

    >
    <Grid>
    <TextBox
Height="26"
,

             Margin="51,16,142,0"

             Name="TextBox1"

             VerticalAlignment="Top"></TextBox>
    <Button
Margin="52,51,0,58"
Name="Button1"

            HorizontalAlignment="Left"
Width="75">KAYDET</Button>

    <TextBox
Height="26" HorizontalAlignment="Right"

             Margin="0,16,31,0"
VerticalAlignment="Top"

             Width="100" Name="TextBox2" ></TextBox>
  </Grid>
</Window>

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.

<Window
x:Class="Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF_Demo"
Height="135" Width="289"

    >
    <Grid>
    <Button
Margin="81,34,125,45"
Name="Button1">Sahip Kim?</Button>

  </Grid>
</Window>

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.

Hepinize kolay gelsin.

Örnek Uygulama Kaynak Dosyaları - 05092007_1.zip (417,09
KB)