2012-03-30 12 views
2

私はプログラムで生成している可変数の列を持つDataGridを持っています。これにはDataGridTemplateColumnsが含まれ、それぞれにCheckBoxとTextBlockを含むDockPanelが含まれています。WPF CheckBox.IsCheckedバインディング

バインディングコード:

Binding bindingPicked = new Binding(string.Format("Prices[{0}].Picked", i)); 
    bindingPicked.Mode = BindingMode.TwoWay; 

チェックボックスコード:

FrameworkElementFactory factoryCheckBox = new FrameworkElementFactory(typeof(CheckBox)); 
    factoryCheckBox.SetValue(CheckBox.IsCheckedProperty, bindingPicked); 

摘みプロパティは:データグリッドが初期化されると、期待どおり

private bool _picked; 
    public bool Picked 
    { 
     get { return _picked; } 
     set { _picked = value; } 
    } 

、採取ゲッターが呼び出されます。ただし、チェックボックスをオンまたはオフにすると、セッターは呼び出されません。これを引き起こしているのは何ですか?私はDependencyPropertyを使いたくないので、ユーザーがCheckBoxをクリックしたときにプロパティセッターが呼び出されるだけで済むと思う。

編集:明らかに私は馬鹿です、私は単に忘れました bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; これを自由に閉じることができます。

答えて

4
bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 

それを行う必要があること:)私はあなたがINotifyPropertyChangedののを実装し

+0

ええと...なんて愚かな間違い(そして2時間はそれを "修正"することを無駄にした)。ありがとう – svinja

1

を、あなたが従うことINotifyPropertyChangedの 正しいパターンを実装する必要がある。

private bool _picked; 
public bool Picked 
{ 
    get { return _picked; } 
    set 
    { 
     if (_picked != value) 
     { 
      _picked = value; 
      if (null != PropertyChanged) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("Picked")); 
      } 
     } 
    } 
} 

UpdateSourceTriggerプロパティは、ソースをいつ更新するかをデータバインディングに指示します。 たとえば、TextBoxの場合、デフォルトはLostFocusです。他のほとんどのコントロールでは、PropertyChangedです。

0

上記のようにセットして、イベントを呼び出す必要があります考えて

関連する問題