2012-04-11 36 views
0

我已經創建了一個自定義集合類,我試圖綁定到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> 

回答

0

的結合Plans實際上並沒有改變,因爲Plans實際上並沒有改變。它正在改變的內容Plans,因此OneTime指令不會抑制這些更改的顯示。

+0

哦,我完全理解。謝謝。經過一次快速測試,我更清楚地知道一次性綁定是如何工作的。一次綁定本身會抑制計劃和分配本身的更改,但不會抑制對兩個集合的添加,因爲它們都實現通知。我想我必須採取另一種方法來防止集合的更新出現在樹視圖中。 – jba0429 2012-04-11 18:03:03