绑定到View的基本viewmodel命令

我有一个基本viewModel和它派生的两个viewModels。 在我的基础viewModel我有一些命令CloseCommand,CancelCommand等

我的视图附加到派生视图模型之一。 我需要将一个按钮绑定到基本viewModel中的CloseCommand。 我怎么能用继承来做到这一点?

我已经从基本viewModel的字符串属性绑定按钮的内容和它的工作正常,但我怎么能绑定一个命令?


只要它们暴露为ViewModel的公共属性,就不需要做任何特殊的绑定。 我也有同样的情况,所以这是我非常执行我如何做到这一点。

首先在你的基类中定义ICommand类型的OKCommand / CancelCommand。 就Execute和CanExecute方法而言,我将它们定义为受保护的虚拟方法(通过你也可以将你的命令定义为虚拟的方式),这将使你能够编写XAML风格,命令值为空)。 在派生的ViewModels中,您只需根据需要覆盖命令,Execute和CanExecute方法,但从您的视图中直接直接绑定到命令名称。

下面是我刚刚向你解释的一个例子。

public abstract class ViewModelbase
{
    private DelegateCommand _okCommand;
    public virtual DelegateCommand OkCommand
    {
        get { return _okCommand ?? (_okCommand = new DelegateCommand(OkExecuteCommand, CanOkExecute)); }
    }

    protected virtual void OkExecuteCommand()
    {
        DialogResult = true;
    }

    protected virtual bool CanOkExecute()
    {
        return IsValid;
    }
}

然后,您只需定义从基本ViewModel类派生的具体ViewModel类

public class SampleViewModel : ViewModelbase
{
   //If u have defined XAML style which sets viability of button as collapsed if its command value is null u simply override command
   public override DelegateCommand OkCommand { get { return null; } }
    protected override void OkExecuteCommand()
    {
        do whatever u want as this is a command execution
    }
}

在XAML中,你不需要做任何特殊的事情,只要将你的按钮命令绑定到Viewmodel Command就好像没有Base类一样。 这里的关键在于你应该使用public modifier公开你的基本ViewModel类的命令(你只需要getter,所以这段代码提供了一个你可以暴露命令的例子)


没什么特别的,这是你需要做的:

  • 将View的DataContext设置为派生的ViewModel
  • 例如,确保在您的ViewModelBase中将CloseCommand声明为公共属性
  • 将Button的Command属性设置为“{Binding CloseCommand}”
  • 链接地址: http://www.djcxy.com/p/56165.html

    上一篇: Binding to base viewmodel command from View

    下一篇: Binding Commands to a Sub Viewmodel