コレクションアイテム依存属性の初期化

4281 ワード

wpfでプロパティをカスタマイズする場合、このプロパティがセットタイプであれば、次のようになります.
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にもっと詳しい説明がある.