我已經創建了一個自定義集合類,我試圖綁定到Silverlight中的兩個不同的treeview。該集合實現INotifyCollectionChanged,集合保存的類型實現INotifyPropertyChanged。在GUI上是一個位於兩個treeview之間的DataGrid。這是一個區域,可以從左側的樹視圖拖動項目並進行操作。這些更改會反映在第二個樹視圖中。第一個treeview應該只綁定一次,第二個treeview應該在源發生更改時更新。但是,由於某種原因,第一個樹視圖上的OneTime綁定似乎根本不起作用;樹視圖仍然得到更新。如果一個類型實現INotifyCollectionChanged或INotifyPropertyChanged,OneTime綁定是否會工作?不正常工作的樹視圖的標記看起來與此類似。我刪除了一些與該問題無關的細節。樹視圖的DataContext被設置爲一種稱爲Client的類型,例如_tv.DataContext = client
。每個客戶都有一組計劃,每個計劃都有一組分配。我爲treeviews使用HierarchicalDataTemplate。我可以忽略一些東西嗎INotifyPropertyChanged和INotifyCollectionChanged已正確實施。我不認爲這是一個邏輯問題。使用單一來源但不同綁定模式的多個綁定目標
<sdk:TreeView Name="_tv" ItemsSource="{Binding Plans, Mode=OneTime}">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Allocations, Mode=OneTime}">
<TextBlock Text="{Binding Name, Mode=OneTime}"/>
<sdk:HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding Fund.Allocations.Count}"></Run>
<Run Text="{Binding Fund.Symbol}"></Run>
<Run Text="{Binding Fund.Name}"></Run>
<Run Text="{Binding Fund.AssetClass}"></Run>
</TextBlock>
</DataTemplate>
</sdk:HierarchicalDataTemplate.ItemTemplate>
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
哦,我完全理解。謝謝。經過一次快速測試,我更清楚地知道一次性綁定是如何工作的。一次綁定本身會抑制計劃和分配本身的更改,但不會抑制對兩個集合的添加,因爲它們都實現通知。我想我必須採取另一種方法來防止集合的更新出現在樹視圖中。 – jba0429 2012-04-11 18:03:03