WPF如何利用多选框进行删除
使用多选框进行删除的大致步骤如下:
-
在WPF界面中添加一个多选框控件,用于选择要删除的项。
-
在ViewModel中定义一个集合属性,用于存储要展示的数据。
-
在ViewModel中定义一个命令,用于删除多选框中选中的项。
-
在ViewModel中实现命令的逻辑,即遍历集合属性,将选中的项从集合中移除。
-
在WPF界面中绑定集合属性和命令到多选框控件和删除按钮上。
-
运行程序,选择要删除的项,点击删除按钮,可以看到选中的项已经从集合中移除。
具体实现方法可以参考以下代码:
WPF界面:
<StackPanel>
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" Margin="5"/>
<TextBlock Text="{Binding Name}" Margin="5"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="删除" Command="{Binding DeleteCommand}" Margin="5"/>
</StackPanel>
ViewModel:
public class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<ItemViewModel> Items { get; set; }
private ICommand _deleteCommand;
public ICommand DeleteCommand
{
get
{
if (_deleteCommand == null)
{
_deleteCommand = new RelayCommand<object>(o => DeleteItems(), o => CanDeleteItems());
}
return _deleteCommand;
}
}
private void DeleteItems()
{
for (int i = Items.Count - 1; i >= 0; i--)
{
if (Items[i].IsSelected)
{
Items.RemoveAt(i);
}
}
}
private bool CanDeleteItems()
{
return Items != null && Items.Any(item => item.IsSelected);
}
// INotifyPropertyChanged implementation...
}
ItemViewModel:
public class ItemViewModel : INotifyPropertyChanged
{
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
}
public string Name { get; set; }
// INotifyPropertyChanged implementation...
}
其中,MainViewModel中的DeleteCommand使用了RelayCommand,需要引入以下命名空间:
using GalaSoft.MvvmLight.Command;
原文地址: https://www.cveoy.top/t/topic/bPzX 著作权归作者所有。请勿转载和采集!