2012-02-20 2 views
1

要素に簡単な方法で情報を格納するカスタムプロパティ/属性/フィールドを要素に与えることはできますか? myobject.parentid(parentidは、オブジェクトの作成時に私が設定した番号で、このオブジェクトが対話するときにmyobject.parentidを介して後で取得されます)。Shapeや他のオブジェクトに "MyCustomID"のようなカスタムプロパティを付けることはできますか?

または、そのような情報をmyobject.Nameまたはmyobject.Tagに格納するのが最も簡単ですか?

答えて

3

最も簡単な方法は、WPFのAttached Propertyです。

添付プロパティを使用すると、任意のプロパティを作成して要素に関連付けることができます。これを使用してデータを格納し、バインディングシナリオに参加することができます。

public class MyCustomIdSource 
{ 
    public static readonly DependencyProperty MyCustomIdProperty = 
     DependencyProperty.RegisterAttached("MyCustomId", typeof(Int32), typeof(MyCustomIdSource)); 

    public static void SetMyCustomId(UIElement element, Int32 value) 
    { 
     element.SetValue(MyCustomIdProperty, value); 
    } 

    public static Int32 GetMyCustomId(UIElement element) 
    { 
     return (Int32)element.GetValue(MyCustomIdProperty); 
    } 
} 

ただし、カスタムデータをWPF要素自体に入れることで、何を達成しているのかを考慮する必要があります。あなたは本当に要素にこれに対する責任があることを望んでいますか?その責任を、ビューのロジックと状態を維持し、それにビューをバインドするクラスに分けることがより理にかなっていますか?これはModel-View-ViewModelパターンとして知られており、WPF開発に適しています。

+0

あなたは接続されたプロパティについてあなたが言うことはすべて正しいですし、型の安全のためにそれらを使用することもお勧めします。しかし、あなたが真剣にFrameworkElementに追加情報を格納する最も簡単な方法を探しているなら、それは 'Tag'プロパティでしょう。 – Clemens

+0

@クレメンス - あなたが正しいことを知っていれば、それは最も簡単で始まります(まだ 'Tag'プロパティがあることは知らなかったですが)。そのプロパティのデータは「シンプル」という概念を圧倒します。私は驚くほど速く、その信じ難い単純なプロパティを使用して激しいクラッシュがVB * shudder *の時代にあったのを覚えています。 – codekaizen

+0

ありがとう:)私は心の中にあったように見えます。それは価値があるにはあまりにも複雑かもしれませんか?私はもう少し説明する必要があるかもしれません...私はコードでオブジェクトを動的に作成しています。それらのうちの1つが対話するとき、私はそれが "親"または "id" "datasize" "url"などのような他の小さなプロパティを持っているかどうかを知りたいでしょう。私は何かを欠いている?例:object.Name = "9_2_24"それ以外の場合は、毎回元のソース(すなわちデータベース)から要求される必要があります。しかし、もし "myObject.parentid"が理想的なのであれば... – Ael