我创建了一个自定义集合类,我试图绑定到silverlight中的两个不同的树视图。该集合实现了INotifyCollectionChanged,集合所持有的类型实现了INotifyPropertyChanged。在GUI上是一个位于两个树视图之间的DataGrid。这是一个可以从左侧树视图拖动项目并进行操作的区域。然后,更改将反映在第二个树视图中。第一个树视图应该只绑定一次,第二个树视图应该在源发生更改时更新。但是,出于某种原因,第一个树视图上的OneTime绑定似乎根本不起作用;树视图仍然会更新。如果类型实现INotifyCollectionChanged或INotifyPropertyChanged,OneTime绑定是否有效?树视图的标记无法正常工作看起来与此类似。我删除了一些与此问题无关的细节。树视图的DataContext设置为名为Client的类型,例如_tv.DataContext = client
。每个客户都有一组计划,每个计划又有一组分配。我正在为树视图使用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 :(得分:0)
Plans
的绑定实际上并没有改变,因为Plans
实际上并没有改变。正在更改Plans
的内容,因此OneTime
指令不会禁止显示这些更改。