2012-03-30 80 views
2

我有一個可編程生成的可變數量的列的數據網格。它包含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; } 
    } 

在DataGrid被初始化,如預期的那樣回升干將被調用。但是,當我選中/取消選中複選框時,不會調用setter。這是什麼造成的?我不想使用DependencyProperty,我不認爲這是需要的,因爲我只需要在用戶單擊CheckBox時調用屬性設置器。

編輯:顯然我是一個白癡,我只是忘了 bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 隨時關閉此。

回答

4
bindingPicked.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 

應該這樣做:)

+0

是的......多麼愚蠢的錯誤(2小時浪費「修復」)。感謝:D – svinja 2012-03-30 07:34:56

1

我想你應該執行INotifyPropertyChanged的和一套

0

正如上面所說的情況,你需要執行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。