У меня есть список элементов в WPF ListBox. Я хочу позволить пользователю выбрать несколько из этих элементов и нажать кнопку «Удалить», чтобы удалить эти элементы из списка.
Используя шаблон MVVM RelayCommand, я создал команду со следующей подписью:
public RelayCommand<IList> RemoveTagsCommand { get; private set; }
В моем представлении я подключаю команду RemoveTagsCommand следующим образом:
<DockPanel>
<Button DockPanel.Dock="Right" Command="{Binding RemoveTagsCommand}" CommandParameter="{Binding ElementName=TagList, Path=SelectedItems}">Remove tags</Button>
<ListBox x:Name="TagList" ItemsSource="{Binding Tags}" SelectionMode="Extended">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Resources>
<DataTemplate DataType="{x:Type Model:Tag}">
...
</DataTemplate>
</ListBox.Resources>
</ListBox>
</DockPanel>
Мой конструктор ViewModel устанавливает экземпляр команды:
RemoveTagsCommand = new RelayCommand<IList>(RemoveTags, CanRemoveTags);
Моя текущая реализация RemoveTags кажется неуклюжей, с приведениями и копированием. Есть ли лучший способ реализовать это?
public void RemoveTags(IList toRemove)
{
var collection = toRemove.Cast<Tag>();
List<Tag> copy = new List<Tag>(collection);
foreach (Tag tag in copy)
{
Tags.Remove(tag);
}
}