創建DependancyProperty收集與可綁定的項目,我需要建立一個DependancyProperty收集 並以某種方式結合或能知道每個項目改變如何在WPF
這是不容易解釋這個問題..
要聲明一個簡單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>
但是,我不能用multibinding,因爲我想知道哪些顏色已經改變 和multibinding給我一個聚合策略,當 我寫完了multibinding轉換器,我會得到所有的值從所有的「無聊症」 在同一時間,將無法知道哪一個 是改變了一個意思..
我開始寫一些簡單的東西那看起來如下:
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解決方案也可以是確定的,如果它將使區分其值發生了變化(在我們的例子中的顏色變化)。
標記在這種情況下,可能看起來像:
<MyClass>
<MyClass.SelectedColors>
<MultiBinding..
<Binding Path="FillColor" ElementName="MyRectWhichHasFillColorDProperty"/>
<Binding blah2 which is Color2 />
<Binding blah3 which is ColorN />
你嘗試過使用ObserableCollection嗎? – makc 2013-02-28 07:57:15
嗯爲什麼?我不需要知道什麼時候項目被添加或刪除,或從集合中被取代或清除 - 我需要知道的是當項目自己被更改時,例如「顏色紅色」更改爲「綠色」。 – 2013-02-28 14:46:23
我覺得不會出現這種多重綁定。首先是 – 2013-02-28 14:46:59