c# - 无法绑定(bind)到 DataContext

标签 c# wpf xaml data-binding

我遇到了一个非常奇怪的问题。我正在尝试将一个属性绑定(bind)到 DataContext,但它不起作用。这就是我正在做的(在 Window.Resources 部分):

<myNS:MyClass x:Key="myObj" MyProp="{Binding}"/>

在代码的其他地方,我像这样设置数据上下文:

myWindow.DataContext = MyNameSpace.MySingleton.Instance;

我没有收到任何错误,但绑定(bind)没有发生。所以我添加了一个调试转换器,看看我是否能弄清楚发生了什么:

<myNS:MyClass x:Key="myObj" MyProp="{Binding Converter={StaticResource Debug}}"/>

我在转换器中设置了一个断点,传递的值为空。发现事情出了问题,我在设置 DataContext 的行上设置了一个断点。它首先被击中,然后是转换器中的断点。因此,DataContext 是在绑定(bind)发生之前设置的。

最后,为了让一些东西起作用,我改成这样:

<myNS:MyClass x:Key="myObj" MyProp="{Binding Source={x:Static myNS:MySingleton.Instance}}"/>

成功了。

我真的不喜欢像这样展开绑定(bind)。我宁愿只绑定(bind)到 DataContext。有问题的窗口包含许多对 DataContext 属性的绑定(bind),这些都工作正常。

谁能解释一下我在这里做错了什么?

刺拳

最佳答案

资源以及其他一些元素(如上下文菜单)不是可视化树的一部分。

因此,它们没有管理 FrameworkElement 来 获取数据上下文。通常,标准类不会利用绑定(bind)语法,因为它需要从 DependencyObject 派生。 ,但是如果您最终确实需要在资源中进行绑定(bind)(例如,对于转换器),您可以使用这个技巧:

  1. 将你的根元素设置为x:Name="Root"
  2. 像这样使用您的绑定(bind):

    MyProp="{Binding Source={x:Reference Root}, Path=DataContext.<YourProp>

这使用根框架元素作为“起点”进行绑定(bind),您可以正常访问数据上下文。

关于c# - 无法绑定(bind)到 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791021/

相关文章:

c# - 如何判断 ListView 正在显示哪些项目?

c# - 试图让 Windows Phone 8 ListPicker 工作

c# - 当文本框为空或来自 xaml 的空格时禁用按钮

c# - 如何查看当前 POST 请求的内容?

c# - 如何使用 INotifyPropertyChanged 实现 DataTable 属性

c# - 如何禁止某些单元格调整行或列的大小

c# - XAML 中的对象初始值设定项

c# - 是否有 .NET 函数来验证类名?

c# - 需要单次点击数据库

c# - 使用和或运算符的 Mongodb c# 过滤器