2

依存関係プロパティを持つカスタム WPF ユーザー コントロールがあります (以下のスニペット)。PropertyChangedCallback が正しく起動していません。

カスタム コントロール:

public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register(
        "Value", typeof(float?), typeof(CustomControl),
        new UIPropertyMetadata(new PropertyChangedCallback(OnDependencyPropertyChanged)));

public float? Value
{
    get { return (float?)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
}

private static void OnDependencyPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
   // Do something
}

単純なパスでプロパティにバインドすると、すべて問題ありません。ただし、区切りパス構文を使用すると、必要なときに依存関係プロパティが更新されません。

作業バインディング:

<namespace:CustomControl Value={Binding ViewModelProperty}/>

バインディングが機能していません:

<namespace:CustomControl Value={Binding ViewModelProperty.ObjectProperty}/>

動作中の構文では、ビュー モデルによって起動された ViewModelProperty の PropertyChanged イベントに応答して、OnDependencyPropertyChanged イベント ハンドラーが呼び出されます。ただし、2 番目の構文では、OnDependencyPropertyChanged イベント ハンドラーは ObjectProperty への変更に対してのみ呼び出され、ViewModelProperty への変更に対しては呼び出されません。区切り記号 (.) のパス構文を適切に機能させるために、追加のセットアップを行う必要がありますか? (デフォルトで TextBox.Text などのプロパティと同じ動作をします)

4

1 に答える 1