Помощь в привязке данных к флажку в WPF

#wpf #data-binding

#wpf #привязка данных

Вопрос:

У меня есть флажок в списке. Я установил в ListBox ItemsSource значение списка агентств. Агентство обладает свойством

 public class Agency 
{ 
  public bool isSelected { get; set;} 
}
  
 <ListBox> <!-- ItemsSource set in codebehind to List<Agency> -->
    <CheckBox IsChecked="{Binding Path=isSelected, Mode=TwoWay}" />
</ListBox>
  

У меня есть функция для проверки всех флажков

 //SelectAll button

    private void SelectAll_Click(object sender, RoutedEventArgs e)
    {
      List<Agency> list = this.AgencySubListBox.ItemsSource as List<Agency>;
      for (int i = 0; i < list.Count; i  )
      {
        Agency d = list[i];
        d.isSelected = true;
      }
    }
  

Когда я нажимаю кнопку выбрать все, я ожидаю, что все флажки будут установлены. Но ничего не происходит.

Ответ №1:

Вы должны реализовать INotifyPropertyChanged для вашего класса Agency. Затем в вашем IsSelected-Property вызовите PropertyChanged, если значение свойства было изменено. Автоматические свойства, которые вы использовали в своем примере, не поддерживают INotifiyPropertyChanged, поэтому вы не можете использовать их для своих целей. Если вы работаете с .net, я бы также рекомендовал начинать имена свойств с верхнего регистра. Это широко принятый стандарт.

Ответ №2:

Вы должны заставить свою модель реализовать INotifyPropertyChanged и реализовать ее

Ответ №3:

Пользовательскому интерфейсу нечего сообщить о том, что привязка вашего флажка признана недействительной и требует перепроверки. Поэтому реализуйте INotifyPropertyChanged для вашего Agency типа.