2012-03-30 2 views
2

프로그래밍 방식으로 생성하는 가변 개수의 열을 가진 DataGrid가 있습니다. 여기에는 DataGridTemplateColumns가 포함되어 있으며 각각 CheckBox 및 TextBlock이 포함 된 DockPanel이 있습니다.WPF CheckBox.IsChecked binding

바인딩 코드 :

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

CheckBox 구성 코드 :

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

왔는데 속성은 예상대로

DataGrid를 초기화
private bool _picked; 
    public bool Picked 
    { 
     get { return _picked; } 
     set { _picked = value; } 
    } 

의 고른 게터가 호출된다. 그러나 확인란을 선택/선택 취소하면 setter가 호출되지 않습니다. 이 원인은 무엇입니까? 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

으로 위의 세트에서 이벤트를 호출해야합니다 생각