【发布时间】:2010-12-10 20:15:24
【问题描述】:
我目前正在使用 WPF 用户控件(我的 XAML 文件的根元素是“UserControl”),我知道它托管在 Window 中。如何使用数据绑定访问 Window 的属性?
有谁知道为什么这么简单
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="..." />
不工作?我得到的错误信息是:
System.Windows.Data 警告:4 : 无法通过引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1'' 找到绑定源。
编辑:我最终使用了 ArsenMkrt 方法的变体,因此接受了他的回答。但是,我仍然有兴趣找出 FindAncestor 不能“正常工作”的原因。
【问题讨论】:
-
你说你改变了他的答案,你能发布你实际做了什么吗?
-
请注意,我在 MVVM 模式的上下文中寻找解决此问题的方法。我想绑定的 Window 的属性实际上是 Window 的 ViewModel 的属性。
-
ArsenMkrt 建议在 UserControl 中创建一个属性并绑定到该属性,然后(在 XAML 中)将该属性绑定到所需的 Window 属性。然而,对于 MVVM 模式,UserControl 从未出现在 XAML 中,因此第二部分是不可能的。
-
所以,我按照建议创建了一个要绑定的新属性,但我没有将它放在 UserControl 中,而是将它放在 UserControl 的 ViewModel 中。这个属性只是持有对 Window 的 ViewModel 的直接引用,允许直接访问所需的属性。新属性很容易初始化:使用的引用可以直接传递到 UserControl 的 ViewModel 的构造函数中。
标签: wpf data-binding xaml relativesource findancestor