2009-09-03 9 views
0

私は開発しているwpfコントロールを持っています。依存プロパティ正しく使用する

このコントロールには別のコントロールが含まれ、カプセル化されています。

私はコントロールを消費するウィンドウに内部コントロールのプロパティを公開します。 また、このプロパティが変更されたときに内部コントロールにロジックを実行させたいと考えています。

提案がありますか?

+0

エラー」を私は両方のプロパティでメタデータを定義する必要があります。 –

答えて

2

内部コントロールと外部コントロールの両方で依存プロパティを定義する必要があります。外部制御用のテンプレートは、内部制御を含むべきである、とプロパティを一緒にバインドする必要があります。

<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/> 

これは、両方のあなたのコントロールが独立して使用可能とお互いから分離されることを保証します。プロパティは、そのコントロールでの使用方法に応じて名前を付けることができます。たとえば、内部コントロールはのように呼び出すことができますが、外側コントロールはCustomerNameのようなより具体的な目的のために使用します。

+0

これは正しいアプローチです。プロキシプロパティはDependencyPropertyではなく、適切なバインディング動作を提供しません。 – AndyM

0

依存関係プロパティの更新は、DependencyPropertyの一部として定義されるプロパティメタデータによって処理されます。 (。また、既存のDPに追加することができますが、それは別のトピックだ)

メタデータを使用してのDependencyPropertyを定義します。

public static readonly DependencyProperty MyValueProperty = 
    DependencyProperty.Register("MyValue", typeof(object), typeof(MyControl), 
    new UIPropertyMetadata(null, new PropertyChangedCallback(MyValue_PropertyChanged))); 

その後、あなたのコールバックを実装していない:それはちょうどdoesnの

private static void MyValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    MyControl c = (MyControl)d; 
    c.DoSomething(); 
} 
関連する問題