Для привязки динамического списка CheckBox в WPF MVVM вы можете использовать коллекцию, которая содержит элементы, отображаемые в CheckBox, а также добавлять свойство в модель представления для отслеживания выбранных элементов.
1. Создайте класс для элемента списка CheckBox в модели представления, который будет содержать свойство для отслеживания выбранности элемента. Например:
public class CheckBoxItem : INotifyPropertyChanged { private bool isChecked; public bool IsChecked { get { return isChecked; } set { isChecked = value; OnPropertyChanged(nameof(IsChecked)); } } public string Text { get; set; } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
2. В модели представления создайте коллекцию CheckBoxItem для хранения элементов списка CheckBox, а также свойство SelectedItems для отслеживания выбранных элементов. Например:
public class ViewModel : INotifyPropertyChanged { private ObservableCollection<CheckBoxItem> checkBoxItems; public ObservableCollection<CheckBoxItem> CheckBoxItems { get { return checkBoxItems; } set { checkBoxItems = value; OnPropertyChanged(nameof(CheckBoxItems)); } } private List<CheckBoxItem> selectedItems; public List<CheckBoxItem> SelectedItems { get { return selectedItems; } set { selectedItems = value; OnPropertyChanged(nameof(SelectedItems)); } } public ViewModel() { CheckBoxItems = new ObservableCollection<CheckBoxItem>(); SelectedItems = new List<CheckBoxItem>(); // Заполнение коллекции элементов списка CheckBox CheckBoxItems.Add(new CheckBoxItem { Text = "Item 1" }); CheckBoxItems.Add(new CheckBoxItem { Text = "Item 2" }); CheckBoxItems.Add(new CheckBoxItem { Text = "Item 3" }); // Изменение выбранности элементов списка CheckBox SelectedItems.Add(CheckBoxItems[0]); SelectedItems.Add(CheckBoxItems[2]); } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
3. В XAML-разметке создайте привязку для CheckBox, используя ItemsControl и DataTemplate. Например:
<Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp" Title="MainWindow" Height="450" Width="800"> <Window.DataContext> <local:ViewModel /> </Window.DataContext> <Grid> <ItemsControl ItemsSource="{Binding CheckBoxItems}"> <ItemsControl.ItemTemplate> <DataTemplate> <CheckBox Content="{Binding Text}" IsChecked="{Binding IsChecked, Mode=TwoWay}" Margin="5" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Grid> </Window>
4. Запустите приложение и вы увидите список элементов CheckBox, которые можно выбирать. Когда пользователь выбирает или снимает флажок, соответствующее свойство в модели представления обновляется.
Таким образом, вы создали привязку динамического списка CheckBox к коллекции в модели представления, а также добавили функциональность для отслеживания выбранных элементов.