DependancyProperty Collection を作成し、何らかの方法でバインドするか、各項目がいつ変更されるかを知る必要があります
この問題を説明するのは簡単ではありません..
単純な DependancyProperty を宣言するには、次のようにします。
public static readonly DependencyProperty SelectedColorProperty =
DependencyProperty.Register("SelectedColor", typeof(Color),
typeof(MyClass), new PropertyMetadata(Colors.Red));
public Color SelectedColor
{
get { return (Color)GetValue(SelectedColorProperty); }
set { SetValue(SelectedColorProperty, value); }
}
そして、後で XAML でそれを行うことができます。
<MyClass SelectedColor="{Binding blah blah}"/>
静的宣言の値の変更に単純なコールバックを追加すると、次のようになり
ますnew PropertyMetadata(Colors.Red)
。new PropertyMetaData(Colors.Red,MyCallback)
値が変更されるたびに、コードビハインドからその変更に反応できるようになります。
さて、私が欲しいのは、次のように XAML で記述されるものです。
<MyClass>
<MyClass.SelectedColors>
<Color>{Binding blah1}</Color>
<Color>{Binding blah2}</Color>
<Color>{Binding blahN}</Color>
<MyClass.SelectedColors>
</MyClass>
ただし、どの色が変更されたかを知りたいのでマルチバインディングを使用できません。マルチバインディングはアグリゲーター戦術を提供します。つまり、マルチバインディングコンバーターの作成が完了すると、すべての「blah」からすべての値を同時に取得し、どちらが変更されたのかを知ることができません..
次のような簡単なものを書き始めました。
public static readonly DependencyProperty SelectedColorsProperty =
DependencyProperty.Register("SelectedColors", typeof(List<Color>),
typeof(MyClass),
new PropertyMetadata(new List<Color>()));
public List<Color> SelectedColors
{
get { return (List<Color>)GetValue(SelectedColorsProperty); }
set { SetValue(SelectedColorsProperty, value); }
}
public MyClass()
{
foreach(var item in SelectedColors)
{
//dunno what goes here.. or how to bind the color change?
}
}
だから今、各アイテムの各変更を処理するコールバックを作成することはできませんよね? それでも、それはまさに私が必要としているものであり、各アイテムの変化に反応できるようにする..
ただし、必要な XAML 構文を表現することはできます..
何か案は?誰かが前にそのような問題にぶつかりましたか? MSDN の非常に短い説明に気付きましたが、それが役立つかどうか、また、役立つ場合はその使用方法がわかりません。ページの最後の段落で、
Freezable<T>
http://msdn.microsoft.com/en-us/library/aa970563.aspx
ご協力ありがとうございます。
更新: どの値が変更されたか (この例ではどの色が変更されたか) を区別できる場合は、MultiBinding Solution も問題ありません。
その場合のマークアップは次のようになります。
<MyClass>
<MyClass.SelectedColors>
<MultiBinding..
<Binding Path="FillColor" ElementName="MyRectWhichHasFillColorDProperty"/>
<Binding blah2 which is Color2 />
<Binding blah3 which is ColorN />