2011-07-29 5 views
3

나는 다음과 같은 UI 항목이 - 하나 개 확인란 목록과 그 목록에있는 모든 체크 박스 토글 하나 개의 체크 박스 -WPF 체크 박스 목록

public ObservableCollection<SomeEntity> MyProperty 
{ 
    get { return _someEntities; } 
    set 
    { 
     if (value == _someEntities) 
      return; 

     _someEntities = value; 
     base.OnPropertyChanged("MyProperty"); 
    } 
} 

- 여기

<DockPanel> 
    <CheckBox 
     Name="SelectCheckboxes" 
     Command="{Binding ToggleCheckBoxes}" 
     Content="Whatever"/> 
</DockPanel> 
<DockPanel> 
    <ListBox Name="MyListBox" 
      ItemsSource="{Binding Path=MyProperty, Mode=TwoWay}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Name="MyCheckBox" 
          Content="{Binding myvalue}" 
          Tag="{Binding mycode}" 
          IsChecked="{Binding Path=isChecked, Mode=TwoWay}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</DockPanel> 

그리고이 MyProperty의 속성입니다 그리고 여기에 ToggleCheckBoxes 명령이 있습니다 -

public ICommand ToggleCheckBoxes 
{ 
    get 
    { 
     if (_toggleCheckBoxesCommand == null) 
     { 
      _toggleCheckBoxesCommand = new RelayCommand(
       param => this.toggleCheckBoxes() 
       ); 
     } 
     return _toggleCheckBoxesCommand; 
    } 
} 

void toggleCheckBoxes() 
{ 
    foreach (var i in MyProperty) 
    { 
     if (i.isChecked) 
      i.isChecked = false; 
     else 
      i.isChecked = true; 
    } 
} 

확인란을 클릭하면 코드의 속성을 살펴보고 isChecked 속성이 변경되었음을 확인할 수 있지만 ListBox는 모든 항목이 선택/선택 취소되었음을 반영하여 업데이트되지 않습니다.

ListBox가 업데이트되지 않을 수있는 내용이 누락 된 사람이 있습니까?

어떤 생각이든.

+0

'SomeEntity'는'INotifyPropertyChanged'를 올바르게 구현합니다. –

+0

@ H.B. - isChecked는 필드가 아니라 속성 이겠지. – CodeNaked

+0

SomeEntity에 대한 코드를 표시해야합니다. – CodeNaked

답변

4

isChecked 구성원이 실제로 속성이고 SomeEntity가 INotifyPropertyChanged를 구현하는지 확인하십시오. 다음과 같은 것 :

public class SomeEntity : INotifyPropertyChanged { 
    private bool _isChecked; 
    public bool isChecked 
    { 
     get { return _isChecked; } 
     set 
     { 
      if (value == _isChecked) 
       return; 

      _isChecked= value; 
      this.NotifyPropertyChanged("isChecked"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 
+0

그랬습니다 - 엔티티의 속성이 아니라 엔티티에서 INotifyPropertyChanged를 사용했습니다. 감사. – czuroski

관련 문제