树集网格视图集合更改时的绑定错误

时间:2012-02-16 08:12:36

标签: c# wpf treeview observablecollection

我有一个WPF MVVM应用程序,它包含一个自定义树网格视图,可从一个可观察的集合中获取其信息。

如果我在不改变observable集合中的任何内容的情况下运行应用程序,它运行正常。

但是,如果我更改了observable集合中的项目,我会收到以下错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'TreeListViewItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

根据此very short blog post,当您尝试绑定ListBoxItems时,可能会发生此错误。现在在上面的错误中,你遇到了TreeListViewItem目标元素的问题,但我肯定能看出这可能是同样的问题。您可以尝试使用这两种方法中的一种来解决这个问题吗?两者都只是为TreeListViewItem创建自定义样式(或者在他的情况下为ListBoxItem创建)。这两个建议是:

  1. 显式设置Horizo​​ntalContentAlignment和VerticalContentAlignment属性
  2. 将OverridesDefaultStyle设置为true,然后忽略值

    <Style x:Key="DeviceContainerStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    
  3. 或者:

        <Style x:Key="DeviceContainerStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
    

    您当然会为TreeListViewItem而不是ListBoxItem更改这些内容。 =)