我正在学习WPF和MVVM设计模式。目前,我的ViewModel中删除客户命令的代码如下所示:
public class vmCustomers : INotifyPropertyChanged
{
...
private ICommand _commandDeleteCustomer = null;
...
public ICommand CommandDeleteCustomer
{
get
{
if (_commandDeleteCustomer == null)
_commandDeleteCustomer = new RelayCommand<object>(DeleteCustomerAction, DeleteCustomerPredicate);
return _commandDeleteCustomer;
}
}
private void DeleteCustomerAction(object o)
{
...stuff...
}
private bool DeleteCustomerPredicate(object o)
{
...stuff...
return true;
}
}
我希望将ICommand的声明精简为如下形式,以便减少每个命令的编码开销:
public readonly ICommand CommandDeleteCustomer = new RelayCommand((obj) => DeleteCustomerAction(obj), (obj) => DeleteCustomerPredicate(obj));
但我得到这个错误:A field initializer cannot reference the non-static field, method, or property vmCustomers.DeleteCustomerAction(object)
是否有一种方法可以在一行代码中声明ICommand,这样我就可以简单地关注与业务相关的代码,而不是重复的基础结构代码。
2条答案
按热度按时间xe55xuns1#
如果您的
RelayCommand.CanExecuteChanegd
挂接到CommandManager.RequerySuggested
事件,则可以删除构造函数初始化,并在单行语句中将该属性初始化为只读计算属性:若要确保从属性返回 * 相同的示例 *,请使用
a)null合并指派运算子(C# 8.0)
B)属性初始化器(单行语句):
bqf10yzr2#
宣告只读的自动实作属性
并将初始化语句移到视图模型构造函数中