在数据绑定到类实例的依赖项属性时帮助解决路径错误

时间:2011-05-17 22:54:02

标签: wpf data-binding

我在应用程序中绑定到业务对象上的某个依赖项属性时遇到了一些问题。我们有许多其他绑定。我只是不确定为什么这个不起作用。

UserControl 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#代码隐藏并验证了以下内容:

  1. DataContext是正确且非null。
  2. 该属性已设置且也为非null。
  3. 但是,我 能够使用C#成功创建绑定:

        var dogPargBinding = new Binding() { Source = BusinessObjectClass.Instance.ActiveDocument, Path = new PropertyPath("Paragraphs") };
        this.DocumentDisplay.SetBinding(ListBox.ItemsSourceProperty, dogPargBinding);
    

    尽管这有效,但我希望绑定能够在XAML中运行,因为我们的大部分开发都是通过Expression Blend完成的。

    有关我们实施的更多细节:

    1. 重申一下,这个模式在代码中的许多其他位置都有效。
    2. ActiveDocument是BusinessObjectClass的依赖项属性,它是通过在C#代码隐藏中创建的多重绑定来设置的。测试显示此属性设置正确。
    3. 我确信对于我们做错的事情有一个简单的解释,但它已经到了需要时间的地步。提前谢谢。

      =============================================== ==============================

      我终于找到了我遇到的问题。使用错误的所有者类类型声明DependencyProperty。这搞砸了所有东西,没有任何VS让我迅速找到答案。

      最有帮助的答案是被删除的答案...... :(

1 个答案:

答案 0 :(得分:2)

您的绑定不正确。你有{Binding Instance.ActiveDocument, Path=Paragraphs},它有效地设置了两次Path属性。

Instance.ActiveDocument部分未指定之前的属性,因此它将使用this Binding constructor,它设置绑定的路径。

然后设置Path属性,有效地覆盖传递给构造函数的值。

我认为您的意思是使用{Binding Path=Instance.ActiveDocument.Paragraphs}。由于您的DataContext是BusinessObjectClass的实例,因此该路径将在其上查找Instance属性。然后,它将查找从Instance属性返回的对象的ActiveDocument属性。最后,查找从ActiveDocument属性返回的对象的Paragraphs属性。