Silverlight で 2 つの異なるツリービューにバインドしようとしているカスタム コレクション クラスを作成しました。コレクションは INotifyCollectionChanged を実装し、コレクションが保持する型は INotifyPropertyChanged を実装します。GUI には、2 つのツリービューの間にある DataGrid があります。これは、左側のツリービューから項目をドラッグして操作できる領域です。変更は、2 番目のツリービューに反映されます。最初のツリービューは一度だけバインドし、2 番目のツリービューはソースに変更があるたびに更新する必要があります。ただし、何らかの理由で、最初のツリービューでの OneTime バインディングがまったく機能していないようです。ツリービューは引き続き更新されます。型が INotifyCollectionChanged または INotifyPropertyChanged を実装している場合、OneTime バインディングは機能しますか? ツリービューのマークアップ t 正しく動作することは、これに似ています。問題に関係のないいくつかの詳細を削除しました。ツリービューの 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>