在wpf中使用mvvm模式,将一个listbox绑定了后台数据,将listbox的items以CheckBox的形式展示,如何通过多选checkbox来获取选中的items?请给出代码
时间: 2023-04-04 20:01:20 浏览: 111
遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList代码
3星 · 编辑精心推荐
您好,可以使用以下代码来实现:
在 XAML 中:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在 ViewModel 中:
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged("Items");
}
}
public ViewModel()
{
// 初始化数据
Items = new ObservableCollection<Item>()
{
new Item() { Name = "Item 1" },
new Item() { Name = "Item 2" },
new Item() { Name = "Item 3" },
new Item() { Name = "Item 4" },
new Item() { Name = "Item 5" },
};
}
public List<Item> GetSelectedItems()
{
return Items.Where(x => x.IsSelected).ToList();
}
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class Item : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在代码中,我们将 ListBox 的 ItemTemplate 设置为一个 CheckBox,同时将 CheckBox 的 IsChecked 属性绑定到 Item 的 IsSelected 属性上。在 ViewModel 中,我们可以通过 GetSelectedItems 方法来获取选中的 Item。
阅读全文