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

我是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观看here

您想做的就是将SelectedItem绑定(bind)到GridView。因此,您可以在ViewModel中对其进行验证。您谈到了验证-您可以通过为Command提供一个类似于ConditionCanIExecuteMyCommand()来实现。

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

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

10-12 03:15
查看更多