ObservableCollection
Silverlight および WPF アプリの場合、依存関係プロパティとしてを含むカスタム コントロールがあります。そのコントロールの 1 つの要素である Border は、 内の項目の構成に応じて色を変更する必要がありますObservableCollection
。
たとえば、コレクションが動物、野菜、鉱物であり、ObjectList
. 少なくとも 1 匹の動物がいる場合は、境界線を赤くします。動物がなく、野菜が少なくとも 1 つある場合は緑色です。それ以外の場合、コレクションには鉱物しか含まれていないため、青色で表示されます。
コレクションを取得して色を決定できるコンバーターを作成したので、次のようなバインディングを作成します。
<Border Background="{Binding ObjectList,
RelativeSource={RelativeSource Self},
Converter={StaticResource MyColorConverter}}" />
課題は、アイテムが追加/削除されるObjectList
と、背景色の再評価をトリガーする必要があることです。ただし、ObjectList
それ自体は変わりません。3 つのオプションがあると思いますが、どれがベスト プラクティスであるかはわかりません。
オブジェクトが追加または削除されるたびに、新しいコレクションを作成します。これは手間がかかるように見えますが、結果
ObjectList
として変更されるため、バックグラウンド更新がトリガーされます。のコールバックで
UpdateTarget
background プロパティを呼び出します。Silverlight では使用できないため、バインドを削除して再度追加するだけです。これもまた少し面倒です。CollectionChanged
ObjectList
UpdateTarget
INotifyPropertyChanged
カスタム コントロールに実装PropertyChanged
しObjectList
、実装内で呼び出しますCollectionChanged
私は 3 が一番好きですが、INPC も実装する DependencyObject があるという事実は奇妙に思えます。それは...ですか?よりエレガントなアプローチはありますか?