视图模型:
using System.Collections.ObjectModel; using System.Diagnostics; using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; public class MainWindowViewModel : ObservableObject { public ObservableCollection<ItemViewModel> ItemsCollection { get; } = new(); public MainWindowViewModel() { ItemsCollection.Add(new ItemViewModel()); ItemsCollection.Add(new ItemViewModel()); ItemsCollection.Add(new ItemViewModel()); } public ICommand RemoveCommand => _removeCommand ??= new RelayCommand<ItemViewModel>(item => Remove(item)); private RelayCommand<ItemViewModel>? _removeCommand; private void Remove(ItemViewModel? item) { if (item is not null) { Debug.WriteLine($"Checked:{item.Checked}"); ItemsCollection.Remove(item); } } }
窗口的视图。ItemsControl.ItemTemplate的DataTemplate元素与UserControl相同,但绑定已修改
<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" Width="600" Height="300"> <Window.DataContext> <local:MainWindowViewModel/> </Window.DataContext> <ScrollViewer VerticalScrollBarVisibility="Visible"> <ItemsControl ItemsSource="{Binding ItemsCollection}" HorizontalAlignment="Stretch" VerticalAlignment="Top"> <ItemsControl.ItemContainerStyle> <Style> <Setter Property="FrameworkElement.Margin" Value="5,20,0,0"/> </Style> </ItemsControl.ItemContainerStyle> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel> <CheckBox IsChecked="{Binding Checked, Mode=OneWayToSource}"/> <Button Content="X" Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Self}}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </ScrollViewer> </Window>
Command的AncestorType要根据上下文具体而定
标签:ItemsCollection,ItemsControl,ItemViewModel,item,Command,using,new,WPF,public From: https://www.cnblogs.com/rain-alone/p/17155109.html