2012-04-11 74 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