0

これが可能かどうかはわかりませんが、次のように設定します。

ホットキーの選択のみを処理するためのカスタマイズされたテキストボックスがあります。ここに私はのDependencyPropertyためのものがありSelectedHotKeyます。

次に、ラベル、テキストボックス、およびボタンであるカスタムコントロールがあります。このコントロールは、TextBoxと同じ名前のを公開し、DependencyProperty次の方法でTextBoxに接続するだけです。

SelectedHotKey="{Binding ElementName=Main, Path=SelectedHotKey, Mode=TwoWay}"

この依存関係プロパティを使用して、テキストボックスのSelectedHotKeyを設定しようとしています。これにより、Text適切に変更されます。

次に、そのユーザーコントロールを使用して、ViewModelにバインドします。

初期化の場合を除いて、これはすべて機能しています。

ViewModelがすでに設定されていて、バインディングでUserControlに渡されている場合、その初期セッターはヒットすらしないため、コントロールを介して伝播されません。PropertyMetaDataメソッドを挿入することを考えましたが、これは静的メソッドであり、インスタンスのテキストボックスにアクセスできません。

何か案は?さらに明確にする必要がある場合はお知らせください。

4

1 に答える 1

4

依存関係プロパティをラップするCLRプロパティにコードロジックを配置しないでください。SetValueすでに見てきたように、フレームワークは依存関係プロパティを直接呼び出すことができるため、これらが呼び出される保証はありません。

正しい方向に進んでいます。依存関係プロパティのメタデータを使用する必要があります。プロパティ変更されたコールバックの最初のパラメーターを使用して、インスタンスにアクセスします。

DependencyProperty SomeProperty = DependencyProperty.Register(
    "Some",
    propertyType,
    ownerType,
    new FrameworkPropertyMetadata(defaultValue, OnSomePropertyChanged));

static void OnSomePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
    // "d" is your instance here, cast it to the required type
}
于 2012-07-26T22:56:44.033 に答える