2016-07-13 3 views
0

데이터 소스 MyInformation에 바인딩 된 그리드 뷰가 있다고 가정 해보십시오. 열 중 하나가 선택란입니다. 나는 그걸로 뭔가를 묶고 싶다.내 체크 박스가 멤버와 바인딩되어 있지 않습니다.

ItemsSource="{Binding MyInformation}" 

ViewModel에서.

public ObservableCollection<Container> MyInformation 
    { 
     get 
     { 
      if (this.myInformation == null) 
      { 
       this.myInformation = new ObservableCollection<Container>(); 
      } 
      return this.myInformation; 
     } 
     set 
     { 
      if (this.myInformation != value) 
      { 
       this.myInformation = value; 
       this.OnPropertyChanged("MyInformation"); 
      } 
     } 
    } 

클래스 컨테이너에는 "GoodValue"멤버가 있습니다.

public class Container 
{ 
    public bool GoodValue {get;set;} 
    // 
} 

회원과 체크 박스가 바인딩되어 있습니다.

<DataTemplate> 
    <CheckBox HorizontalAlignment="Center" IsChecked="{Binding GoodValue, Converter={StaticResource ShortToBooleanConverter}}" Click="CheckBox_Checked"></CheckBox> 
    </DataTemplate> 

내가 GoodValue 생각으로 내가 뷰 모델에서 만든 재산 GoodValue이없는이 컨테이너의 구성원입니다. ObservableCollection에는 자동으로 포함됩니다.

문제는 데이터베이스에서 데이터를 읽을 때마다 발생합니다. 이 확인란은 선택되어 있지 않습니다. 그래서 나는 내 코드를 의심한다. 힌트를 가져 주셔서 감사합니다.

답변

0

당신은 두 가지 일을 수행 할 수 있습니다

  1. 확인을 일부 바인딩 오류
  2. 이 클래스 컨테이너에 인터페이스에서 INotifyPropertyChanged 구현이있는 경우.

    공용 클래스 컨테이너 : {

    private bool _goodValue; 
    
        public string GoodValue 
        { 
         get 
         { 
          return _goodValue; 
         } 
         set 
         { 
          _goodValue = value; 
          OnPropertyChanged("GoodValue"); 
         } 
        } 
    
        protected void OnPropertyChanged(string name) 
        { 
         PropertyChangedEventHandler handler = PropertyChanged; 
         if (PropertyChanged != null) 
          PropertyChanged(this, new PropertyChangedEventArgs(name)); 
        } 
    
        public event PropertyChangedEventHandler PropertyChanged; 
    } 
    

새 항목을 삽입하거나 컬렉션에서 삭제 될 때보기에 통지 할 경우 ObservableCollection에는 유용하지만 경우를에서 INotifyPropertyChanged 내부에 포함 된 객체가 InotifyPropertyChanged를 구현하지 않으면 객체의 속성을 변경해도보기가 변경되지 않습니다.

+1

그냥 오류를 찾으십시오. 내 ShortToBooleanConverter가 잘못되었습니다. true이면 1, false는 0입니다. 그러나 제 경우에는 테이블의 값이 1/0이 아닙니다. 변환기를 다시 작성해야합니다. – Bigeyes

관련 문제