如何在按钮Command Param中传递特定的视图模型对象?

时间:2009-02-09 14:08:10

标签: wpf data-binding mvvm button routed-commands

我有一个使用Master-Detail UI模式的简单WPF程序,其中Detail显示Master窗格中当前选定的集合项。我正在使用MVVM,每个XAML页面都由一个ViewModel对象支持,该对象被设置为DataContext。

现在,我想在主窗格中添加一个DELETE按钮,以从主项目列表中删除。但是,我无法弄清楚如何将当前所选项的viewmodel对象作为按钮CommandParameter传递给路由命令处理程序代码。

提前感谢任何指示。

麦克

2 个答案:

答案 0 :(得分:2)

类似于Paul所展示的内容,您的视图模型将知道当前选择的项目。即。

public class MyVM
{
 public ObservableCollection<MyObject> MyCollection { get; set; }
 public MyObject CurrentItem { get; set; }
}

您的XAML可以简单地

CommandParameter="{Binding Path=CurrentItem}"

只要您的主窗格在选择它时设置了CurrentItem属性,您的命令就可以简单地将CurrentItem设置为命令参数。

答案 1 :(得分:1)

一种选择是使用对视图模型的引用创建每个命令,并在视图模型上创建绑定到当前所选项的属性。这样您就不需要将所选项作为参数传递 - 该命令可以从VM检索它。如果这不适合您的情况,您可以传递所选项目,如下所示:

<Button Content="Delete"
                Command="{Binding DeleteCommand}"
                CommandParameter="{Binding ElementName=listBox_, Path=SelectedValue}" />

其中listBox_是一个派生自Selector的控件。

希望有所帮助,