我正在使用 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。很舒服。:)