私は開発しているwpfコントロールを持っています。依存プロパティ正しく使用する
このコントロールには別のコントロールが含まれ、カプセル化されています。
私はコントロールを消費するウィンドウに内部コントロールのプロパティを公開します。 また、このプロパティが変更されたときに内部コントロールにロジックを実行させたいと考えています。
提案がありますか?
私は開発しているwpfコントロールを持っています。依存プロパティ正しく使用する
このコントロールには別のコントロールが含まれ、カプセル化されています。
私はコントロールを消費するウィンドウに内部コントロールのプロパティを公開します。 また、このプロパティが変更されたときに内部コントロールにロジックを実行させたいと考えています。
提案がありますか?
内部コントロールと外部コントロールの両方で依存プロパティを定義する必要があります。外部制御用のテンプレートは、内部制御を含むべきである、とプロパティを一緒にバインドする必要があります。
<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/>
これは、両方のあなたのコントロールが独立して使用可能とお互いから分離されることを保証します。プロパティは、そのコントロールでの使用方法に応じて名前を付けることができます。たとえば、内部コントロールはのように呼び出すことができますが、外側コントロールはCustomerName
のようなより具体的な目的のために使用します。
これは正しいアプローチです。プロキシプロパティはDependencyPropertyではなく、適切なバインディング動作を提供しません。 – AndyM
依存関係プロパティの更新は、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();
}
エラー」を私は両方のプロパティでメタデータを定義する必要があります。 –