2

カスタム WPF コントロール基本クラスがあります。この基本クラスは、"List<"some own type">" 型のカスタム プロパティを登録します。

設計時にプロパティを初期化するにはどうすればよいですか? リストには常に 8 つのオブジェクトがあり、ユーザーはこのオブジェクトを変更できる必要があります。

PropertyMetadata オブジェクトでデフォルト値を渡そうとしましたが、プロパティ エディターに表示されるコレクションは常に空です。

public class CustomPropertyTestBase : UserControl
{

    static CustomPropertyTestBase()
    {
        List<object> defaultValue = new List<object>(new object[8]);
        MyCustomObjectsProperty = DependencyProperty.Register("MyCustomObjects",
            typeof(List<object>), typeof(CustomPropertyTestBase),
            new PropertyMetadata(defaultValue));
    }

    public static DependencyProperty MyCustomObjectsProperty;

    [Category("MyCustomProperties")]
    public List<object> MyCustomObjects
    {
        get;
        set;
    }
}

編集:

プロパティ エディタで新しいオブジェクトを追加しても、これらの新しいオブジェクトは保存されません。プロパティ エディタを再度開くと、リストは再び空になります。

デバッガーをデザイナーにアタッチしましたが、プロパティの get メソッドまたは set メソッドがエディターによって呼び出されることはありません。

解決:

「dowhilefor」が述べたように。タイプ ObservableCollection を変更する必要がありました。これで、デザイナーは変更されたリストを正しく保存します。ありがとう。

4

3 に答える 3

2

設計時にサンプルデータを表示する必要がある場合は、サンプルデータをC#コードにハードコーディングしないでください。

代わりに、属性d:DesignDataとサポートするサンプルデータ* .xamlファイルを使用して、デザイナーにサンプルデータを表示します。記事「設計時属性」は、その方法を示しています。

DesignDataに関する追加の優れた記事は次のとおりです。Blend、VS2010、および...でのDesignDataMVVMのサポート

DesignDataはBlendだけでなく、VisualStudioでも機能することに注意してください。

于 2012-06-27T11:32:42.160 に答える
1

このようなものが機能するはずです:

public MainWindow()
    {
        InitializeComponent();

        if( System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
        {
            MyCustomObjects = new List<object>();
            MyCustomObjects.Add("Hello");
        }
    }

しかし、おそらくそれは最善の解決策ではありません。Expression Blendにはダミーデータを持つためのツールがいくつかあったことを覚えていますが、それらがどのようにそれを行ったかを思い出せません。もちろん、これは静的であり、変更することはできませんが、これは可能ではないと思います。

于 2012-06-27T10:54:41.000 に答える
1

「dowhilefor」が述べたように。タイプ ObservableCollection を変更する必要がありました。これで、デザイナーは変更されたリストを正しく保存します。ありがとう。

于 2012-06-27T12:02:54.317 に答える