#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
типа.