2016-04-05 15 views
0

私はバックグラウンドブラシに双方向バインディングを持っています。依存プロパティを設定しました。また、INotifyPropertyChangedインターフェイスも使用しています。しかし、私はまだ双方向バインディングに問題があります。wpfコントロールのバックグラウンド双方向バインディングは片方向でしか動作しません

ボタンにバインドされているプロパティを更新するとボタンの背景が変わりますが、ボタンの背景を直接更新した場合(「button.Background = Brushes.Blue」)、プロパティは更新されません。

<Button Background="{Binding ElementName=MainWindow,Path=TitleBrush,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

プロパティ:

TitleBrush = Brushes.Red; // This works great 
button.Background = Brushes.Red; // This changes the background but doesn't update the property 

すべてのヘルプは高く評価されています。私は、背景色を変更

public Brush TitleBrush 
{ 
    get 
    { 
     return (Brush)GetValue(TitleBrushProperty); 
    } 
    set 
    { 
     if (!_graph.TitleBrush.Equals(value)) 
     { 
      _graph.TitleBrush = value; 
      SetValue(TitleBrushProperty, value); 
      NotifyPropertyChanged(nameof(TitleBrush)); 
     } 
    } 
} 

public static readonly DependencyProperty TitleBrushProperty = 
     DependencyProperty.Register(nameof(TitleBrush), typeof(Brush), typeof(MainWindow)); 

二つの方法ここで

はボタンのXAMLです。

答えて

0

TwoWayは、値をバウンドプロパティに設定し、値を受け入れるためのものです。あなたのケースでは、両方のケースのために一方向に、つまりコントロールに設定しています。コントロールがプロパティ値を返送していません。 TwoWayは本当に入力フィールド用です。コードビハインドを使用している場合は、boundプロパティを使用する必要があります。

ソースプロパティまたはターゲットプロパティのどちらかへの変更は自動的に他を更新するようにします

BindingMode Enumeration documentation状態として

。このタイプのバインディングは、編集可能なフォームまたは他の完全にインタラクティブなUIシナリオに適しています。

+0

ありがとう、私はそうではなかったと思っていた。しかし、とにかく、私は他の何かを私が推測するでしょう。 – kevincorrigan

+0

ようこそ。それがWPFが動作するように設計された方法です。コントロールの色をプログラマチックに設定する必要がある場合は、別のViewModelを作成し、そのプロパティを配置し、DataContextとしてインスタンスを設定し、そのように操作することができます。コントロールへの直接アクセス/呼び出しは最後の手段である必要があります。 –

関連する問題