在WPF中,自定义命令具有事件处理程序,例如command_Executed和command_CanExecute,最佳实践是实现逻辑不应该直接在代码隐藏类中实现,并且它应该只包含对更高级别实现逻辑的函数调用
在创建自定义命令时,如果命令的处理函数中只有一个函数调用,则将它直接放在代码隐藏中很简单,但如果有多个函数调用或函数调用返回某些内容怎么办?在做出决定的基础上(特别是在禁用/启用命令的command_CanExecute函数的情况下,必须决定何时启用或禁用命令)。我一直在考虑的可能性是哪一个,哪个最适合维护,保持代码清洁,软件工程原理和最佳实践?
将所有函数调用和决策制定语句保留在代码隐藏中(在command_execute或代码隐藏中的某些函数中执行command_execute调用)。如果代码很简单就很好,但是当代码中有许多处理程序时会让事情变得丑陋。这里没有实现代码,只有我之前提到的决策代码。
将实现逻辑保留在定义命令的类中,并使其可通过静态属性访问。现在,代码隐藏中的处理程序只有1个函数调用,如果必须,将接收返回值。
在实现应用程序实际功能的更高级别的类中实现它,以便代码隐藏处理程序只有一个函数调用。这是最有意义的,但是这个选项在我的脑海中产生了怀疑,因为在某些情况下,命令处理程序可能必须从许多不同的不相关的类中调用方法,因此很难确定放置该逻辑的位置。
我错过的任何其他内容。
答案 0 :(得分:4)
通常我在ViewModel
中使用RelayCommand或DelegateCommand(如果您不使用MVVM,则使用代码隐藏)
private ICommand _customCommand;
public ICommand CustomCommand
{
get
{
if (_customCommand == null)
{
_customCommand = new RelayCommand(
CustomCommandHandler, CanCustomCommandExecute);
}
return _customCommand;
}
}
private void CustomCommandHandler()
{
// Execute Command
}
private bool CanCustomCommandExecute()
{
// Return true/false if the command can execute or not
}
XAML:
<Button Command="{Binding CustomCommand}" />