2011-09-27 78 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