開発中のwpfコントロールがあります。
このコントロールには、別のコントロールが含まれ、カプセル化されています。
内部コントロールのプロパティを、コントロールを使用するウィンドウに公開したいと思います。また、このプロパティが変更されたときに内部コントロールがロジックを実行するようにします。
助言がありますか?
開発中のwpfコントロールがあります。
このコントロールには、別のコントロールが含まれ、カプセル化されています。
内部コントロールのプロパティを、コントロールを使用するウィンドウに公開したいと思います。また、このプロパティが変更されたときに内部コントロールがロジックを実行するようにします。
助言がありますか?
内部コントロールと外部コントロールの両方で、依存関係プロパティを定義する必要があります。外側のコントロールのテンプレートには内側のコントロールが含まれている必要があり、プロパティをまとめてバインドする必要があります。
<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/>
これにより、両方のコントロールが独立して使用でき、互いに分離されます。プロパティは、そのコントロールでの用途に応じて名前を付けることができます。たとえば、内側のコントロールは のように呼び出しText
、外側のコントロールは のように特定の目的で使用しCustomerName
ます。
依存関係プロパティの更新は、DependencyProperty の一部として定義されているプロパティ メタデータを介して処理されます。(既存の DP に追加することもできますが、それは別のトピックです。)
メタデータを使用して DependencyProperty を定義します。
public static readonly DependencyProperty MyValueProperty =
DependencyProperty.Register("MyValue", typeof(object), typeof(MyControl),
new UIPropertyMetadata(null, new PropertyChangedCallback(MyValue_PropertyChanged)));
次に、コールバックを実装します。
private static void MyValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyControl c = (MyControl)d;
c.DoSomething();
}