wpf - 将 VM 事件绑定(bind)到 XAML 中的命令

标签 wpf mvvm

问题是“如何将 VM 触发的事件映射到使用 XAML 的命令?”

我是 WPF 和 MVVM 的新手。我真正想做的是这个……

UI 有一个按钮和一个网格控件。用户选择网格控件中的单个项目并按下按钮。根据在网格中选择的项目类型(A 或 B),会显示两个不同的模式对话框之一,要求用户提供额外的输入。当用户在对话框中单击确定时,将执行正确的命令。

这就是我认为我应该这样做的方式......

XAML 将按钮绑定(bind)到命令。该命令查看当前选定的项目并引发两个不同事件之一以指示所选项目的类型。在 XAML 中,这两个事件需要链接到命令。

这让我想到了我上面提出的问题。如果我的 VM 触发两个不同的事件,我如何将每个事件绑定(bind)到 XAML 中的命令?

最佳答案

您好,我为您创建了一个示例 - 您并没有真正提供任何示例代码,所以我只是举一个常见的例子

public class MyViewModel : BaseViewModel
{

    private object selectedItem;
    private ICommand myCommand;


    public ICommand MyCommand
    {
        get
        {
            if(myCommand == null)
            {
                myCommand = new RelayCommand(MyCommandMethod, CanIExecuteMyCommand);
            }

            return myCommand;
        }
    }


    public object SelectedItem
    {
        get
        {
            return selectedItem;
        }
        set
        {
            selectedItem = value;
            RaisePropertyChanged("SelectedItem");
            CommandManager.InvalidateRequerySuggested();
        }
    }

    private void MyCommandMethod()
    {
        if(SelectedItem is MyClassA)
        {
            // do A stuff
        }
        else if(SelectedItem is MyClassB)
        {
            // do B stuff
        }

        //Can this happen?
    }

    private bool CanIExecuteMyCommand()
    {
        return selectedItem != null;
    }

}
RelayCommand watch here

你要做的是绑定(bind)SelectedItem给您的GridView .所以你可以在 ViewModel 中验证它.你谈到了验证——你可以通过给你的命令一个 Condition 来做到这一点。喜欢 CanIExecuteMyCommand() .

您应该为 MyClassA 和 MyClassB 使用父类!它们应该是 - 因为您在同一个 GridView 中使用它们。否则与对象伴侣一起去。

关于wpf - 将 VM 事件绑定(bind)到 XAML 中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035425/

相关文章:

wpf - 如何在数据网格的 rowheadertemplate 中设置值?

c# - 对话框 XAML 和 Material 设计 WPF

c# - 在 C# WPF 中为 MVVM 数据绑定(bind)定义属性的简洁方法

c# - 将本地数据库放在 Visual Studio 解决方案中的什么位置?

wpf 从另一个文件夹/命名空间加载资源

wpf - 两列DataGrid : Property name and Property value

c# - 当绑定(bind)属性的值未更改时,是否可以说服 PropertyChangedCallback 运行?

c# - 如何将 Entity Framework ICollection 更改为 ObservableCollection?

c# - 带有虚拟化的 ScrollIntoView 和 ListView

wpf - 如何数据绑定(bind) WPF Slider 的 Thumb 的 DragCompleted 事件