2012-02-16 50 views
1

我有一個WPF MVVM應用程序,其中包含一個自定義樹網格視圖,從可觀察集合中獲取其信息。樹網格查看綁定錯誤收集更改

如果我在不改變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') 

任何想法,我將如何解決這個問題?

+0

如何更改集合的內容? – Tigran 2012-02-16 08:17:52

+0

它正在改變一個計時器事件。在事件調用中,我有另一個循環的集合,並只將有效的項目添加到顯示的列表中。 – 2012-02-16 11:51:13

回答

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"/> 
    

或者:

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

你很好d,當然,更改這些爲TreeListViewItem而不是ListBoxItem。 =)