问题是“如何将 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/