我正在使用 MVVM。有一个列表,单击按钮即可<Button Command="{Binding AddKernel}"/>
添加项目。
(查看)列表:
<StackPanel Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" >
<ListBox ItemsSource = "{Binding Kernels}" HorizontalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<Button Command="{Binding RemoveKernel}" Content="Delete" Margin="5" Width="40" Height="18" VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}" Margin="5" FontSize="16" VerticalAlignment="Center" />
<CheckBox IsChecked="{Binding IsVisualizationKernel}" Margin="5" FontSize="16" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
(模型)模型有一个应该删除列表项的方法。我需要将一个内核实例传递给这个方法的参数。
public static void RemoveKernel(object kernel)
{
if (kernel is Kernel)
{
Kernels.Remove((Kernel)kernel);
}
else
{
System.Console.WriteLine("TRIWOGA!!!");
}
}
(ViewModel) 我这样称呼这个方法:
public ICommand RemoveKernel
{
get
{
return new RelayCommand(Well.RemoveKernel);
}
}
我不知道如何将内核实例传递给 RemoveKernel 方法参数?
取决于
RelayCommand
您使用的类实现。并非我见过的所有此类的实现都支持将参数传递给命令。假设您使用此实现:
然后将列表元素传递给命令将如下所示
CommandParameter={Binding}
将当前对象(列表项)完整地传递给命令。实现是这样的
注意团队的位置。如果是在窗口的ViewModel里面,而不是在里面
Kernel
,从你调用移除元素的方式来看,是的,那么你需要Window
通过它把相对路径中的命令绑定到DataContext
。您还可以禁用命令的执行,如果集合元素对象不是类,则禁用按钮
Kernel
,使用CanExecute
命令:CanExecute
如果条件返回,该按钮将自行禁用false
。很舒服。:)