2011-09-27 55 views
2

我的朋友,如何綁定到擁有窗口的控件屬性(從對話窗口)?

我有一個問題,我只是無法解決的WPF。我有兩個窗口,主窗口Window1。我想將我的子窗口中的ListView綁定到父窗口中的控件屬性。詳細介紹:

主窗口在XAML中聲明的控制,

<local:MyControl x:Name="View"/>

再往下我有獲得正通過「查看」,「Session.Events」公共財產(觀察到的集合飼餵列表視圖)

<ListView ItemsSource="{Binding ElementName=View, Path=Session.Events}"/> 

的正常工作,但現在我已經以這種方式從主窗口催生了第二個窗口:

Window1 MyWin1 = new Window1(); 
MyWin1.Owner = this; 
MyWin1.ShowDialog(); 

而這第二個窗口有一個ListView,它也需要由我的'View'控件提供。我想通過綁定來完成,但我咬牙切齒。不管我嘗試,它都不起作用。我確實有一個工作版本通過代碼隱藏...

Window1 Parent = (Window1)this.Owner; 
MyListView.ItemsSource = Parent.CCView.Session.Events; 

但我寧願做XAML中的綁定並保存額外的代碼。另外我希望它能幫助我更好地理解綁定,這對我來說仍然是一個謎。

非常感謝你和我的問候,
保羅

回答

2

您可以在您的XAML的邏輯樹綁定。第二個窗口不是第一個窗口樹的一部分。我認爲你的情況最簡單的方法應該是通過DataContext到您的子窗口:

MyWin1 = new Window1 { 
    DataContext = this.DataContext, 
    Owner = this 
}; 
MyWin1.ShowDialog(); 
+0

嗨flq,感謝提示!我將它包含在內,但是如何在Window1中運行實際的綁定?我試過ItemsSource =「{Binding ElementName = View,Path = Session.Events}」和一堆其他的東西,但我不能讓它工作... – hpalu

+0

hm,看起來像你不使用DataContext?不過,這樣做你會知道你的綁定是指什麼。如果例如你的DataContext是Session,綁定是'{Binding Events}' - DataContext從邏輯樹中一直繼承下來 – flq

+0

:D就是這樣,非常感謝! – hpalu