问题是“如何使用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提供一个类似于Condition
的CanIExecuteMyCommand()
来实现。您应该为MyClassA和MyClassB使用父类!它们应该是-因为您在同一GridView中使用它们。否则与对象伴侣一起去。
关于wpf - 在XAML中将VM事件绑定(bind)到命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43035425/