Есть несколько вещей, которые нужно изменить здесь, чтобы это заработало.Во-первых, вам нужно обернуть ваше логическое значение в объект, который реализует интерфейс INotifyPropertyChanged, чтобы получить уведомление об изменении, которое вы ищете.В настоящее время вы привязываетесь к логическим значениям в вашей коллекции, которые не реализуют интерфейс.Для этого вы можете создать класс-оболочку следующим образом:
public class Wrapper: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private bool val = false;
public bool Val
{
get { return val; }
set
{
val = value;
this.OnPropertyChanged("Val");
}
}
public Wrapper(bool val)
{
this.val = val;
}
}
Затем вы захотите создать эти объекты в своей форме вместо списка логических значений.Вы также можете использовать наблюдаемую коллекцию вместо списка, чтобы отправлять уведомления о добавляемых и удаляемых элементах.Это показано ниже:
public Window1()
{
InitializeComponent();
this.DataContext = this;
}
private ObservableCollection<Wrapper> myCollection = new ObservableCollection<Wrapper>()
{new Wrapper(true), new Wrapper(false), new Wrapper(true)};
public ObservableCollection<Wrapper> MyCollection
{
get { return myCollection; }
}
Следующее, что нужно сделать, это отобразить список флажков в вашем пользовательском интерфейсе.Для этого WPF предоставляет элементы управления.ListBox - это itemcontrol, поэтому мы можем использовать его как отправную точку.Установите для элемента источника списка значение MyCollection.Затем нам нужно определить, как каждый объект Wrapper будет отображаться в списке, и это можно сделать с помощью таблицы данных, которая создается в ресурсах Windows.Это показано ниже:
<Window.Resources>
<DataTemplate x:Key="myCollectionItems">
<CheckBox IsChecked="{Binding Path=Val, Mode=TwoWay}"></CheckBox>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=MyCollection}" ItemTemplate="{StaticResource myCollectionItems}"></ListBox>
</Grid>
Это должно заставить вас работать с простой демонстрацией флажков, значения которых связаны со списком логических значений.