wpf listbox中添加checkbox实现多选,并将选中的值传入后台,使用mvvm模型,给出示例代码
时间: 2023-04-04 22:02:04 浏览: 83
好的,以下是示例代码:
XAML:
```
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
```
ViewModel:
```
public class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<ItemViewModel> Items { get; set; }
public MainViewModel()
{
Items = new ObservableCollection<ItemViewModel>
{
new ItemViewModel { Name = "Item 1" },
new ItemViewModel { Name = "Item 2" },
new ItemViewModel { Name = "Item 3" },
new ItemViewModel { Name = "Item 4" },
new ItemViewModel { Name = "Item 5" }
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class ItemViewModel : INotifyPropertyChanged
{
private bool _isSelected;
public string Name { get; set; }
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
在 ViewModel 中,我们使用了 INotifyPropertyChanged 接口来通知 View 层数据的变化。同时,我们将每个 Item 的 IsSelected 属性绑定到了 CheckBox 的 IsChecked 属性上,这样就可以实现多选了。最后,我们可以在 ViewModel 中获取选中的 Item,从而将选中的值传入后台。