我在绑定到应用程序中业务对象的某个依赖项属性时遇到了一些问题。 我们还有许多其他绑定。 我只是不确定为什么这个不起作用。
用户控件 XAML 的外观基本上如下所示。 这不起作用,并且在我检查状态时会产生PathError
。
<UserControl>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource BusinessObject}}">
<ListBox x:Name="DocumentDisplay" ItemContainerStyle="{DynamicResource ContainerStyle}" ItemsSource="{Binding Instance.ActiveDocument, Path=Paragraphs}" />
</Grid>
</UserControl>
我已经签入了 C# 代码隐藏并验证了以下内容:
- 数据上下文是正确的,并且非空。
- 该属性已设置,也是非 null。
但是,我能够使用 C# 成功创建绑定:
var dogPargBinding = new Binding() { Source = BusinessObjectClass.Instance.ActiveDocument, Path = new PropertyPath("Paragraphs") };
this.DocumentDisplay.SetBinding(ListBox.ItemsSourceProperty, dogPargBinding);
即使这有效,我也希望绑定从 XAML 工作,因为我们的大部分开发都是通过表达式混合完成的。
有关我们实施的更多详细信息:
- 重申一下,同样的模式在代码中的许多其他位置都有效。
- ActiveDocument 是 BusinessObjectClass 的依赖项属性,它是从 C# 代码隐藏中创建的多绑定设置的。 测试表明此属性设置正确。
我敢肯定,对于我们做错了什么,有一个简单的解释,但它已经到了该问的地步了。 提前谢谢。
====
=====================================================================================我终于找到了我遇到的问题。 使用错误的所有者类类型声明了依赖项属性。 这搞砸了一切,VS 所做的一切都让我很快找到了答案。
最有用的答案是被删除的答案... :(
您的绑定不正确。您有 {Binding Instance.ActiveDocument, Path=Paragraphs}
,它有效地设置 Path 属性两次。
Instance.ActiveDocument
部件在它之前没有指定属性,因此它将使用此 Binding 构造函数,该构造函数设置绑定的路径。
然后设置 Path 属性,有效地覆盖传递给构造函数的值。
我想你的意思是使用{Binding Path=Instance.ActiveDocument.Paragraphs}
.由于 DataContext 是 BusinessObjectClass
的实例,因此此路径将在其上查找 Instance 属性。然后,它将在从实例属性返回的对象上查找活动文档属性。最后,查找从 ActiveDocument 属性返回的对象上的 Paragraphs 属性。