コレクションアイテム依存属性の初期化
4281 ワード
wpfでプロパティをカスタマイズする場合、このプロパティがセットタイプであれば、次のようになります.
使用状況
実際に実行すると、Items属性のCountは1ではなく2であり、これはデフォルトですべてのインスタンスと共有するためである.コンストラクション関数で初期化するだけでよい、一意のインスタンスに設定する.
public class DemoControl : Control
{
public List<string> Items
{
get { return (List<string>)GetValue(ItemsProperty); }
}
// Using a DependencyProperty as the backing store for Items. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemsProperty =
DependencyProperty.Register("Items", typeof(List<string>), typeof(DemoControl), new UIPropertyMetadata(new List<string>()));
}
使用状況
<local:DemoControl x:Name="demoControl1">
<local:DemoControl.Items>
<sys:String>string1</sys:String>
</local:DemoControl.Items>
</local:DemoControl>
<local:DemoControl>
<local:DemoControl.Items>
<sys:String>string2</sys:String>
</local:DemoControl.Items>
</local:DemoControl>
実際に実行すると、Items属性のCountは1ではなく2であり、これはデフォルトですべてのインスタンスと共有するためである.コンストラクション関数で初期化するだけでよい、一意のインスタンスに設定する.
public DemoControl():base()
{
SetValue(ItemsProperty, new List<string>());
}
msdnにもっと詳しい説明がある.