【问题标题】:How do I pass a specific viewmodel object in a button's CommandParam?如何在按钮的 CommandParam 中传递特定的视图模型对象?
【发布时间】:2010-10-06 09:48:18
【问题描述】:

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

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

提前感谢您的任何指点。

迈克

【问题讨论】:

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


    【解决方案1】:

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

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

    然后您的 XAML 可以很简单

    CommandParameter="{Binding Path=CurrentItem}"
    

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

    【讨论】:

      【解决方案2】:

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

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

      其中 listBox_ 是从 Selector 派生的控件。

      希望对你有帮助,

      保罗

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2016-11-29
        • 2019-07-24
        • 1970-01-01
        • 2017-02-18
        相关资源
        最近更新 更多