绑定到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,所以这段代码提供了一个你可以暴露命令的例子)
没什么特别的,这是你需要做的: