2

私はカスタムコントロールを持っています


    static CustomControl1()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new     FrameworkPropertyMetadata(typeof(CustomControl1)));
    }

    public List<string> MyProperty
    {
        get { return (List<string>)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(List<string>), 
                                                   typeof(CustomControl1), 
                                                   new UIPropertyMetadata(new List<string>()));        

アプリケーションで複数のCustomControl1を使用し、各MyPropertyに値を設定する場合

  <StackPanel HorizontalAlignment="Left" Orientation="Vertical" VerticalAlignment="Top" Width="176">
        <local:CustomControl1>          
            <local:CustomControl1.MyProperty>
                <System:String>A</System:String>
                <System:String>B</System:String>
                <System:String>C</System:String>
                <System:String>D</System:String>
            </local:CustomControl1.MyProperty>          
        </local:CustomControl1>
        <local:CustomControl1>          
            <local:CustomControl1.MyProperty>
                <System:String>F</System:String>
                <System:String>E</System:String>                    
            </local:CustomControl1.MyProperty>          
        </local:CustomControl1>
    </StackPanel>

solution を実行すると、各CustomControl1 およびデザイン モードで表示されるすべての値は、最後の customcontrol1 の値のみを表示します。

そのため、それらすべてが同じインスタンス データを共有しているように見えます。

4

1 に答える 1

0

コレクション (リスト、ディクショナリなど) の依存関係プロパティを作成するときは、常にクラスのコンストラクターで DP を再初期化します。(そうしないと、すべてのインスタンスに同じリストを使用することになります)

だからあなたの場合:

public CustomControl1()
{
    MyProperty = new List<string>();
}

依存関係プロパティのデフォルト値の値を削除します。

public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(List<string>), 
                                                   typeof(CustomControl1), 
                                                   new UIPropertyMetadata(null));        
于 2012-10-28T09:43:16.463 に答える