命令类无法工作 - ICommand实现
我在一个使用MVVM模式的WPF项目中工作。为了清晰地分离关注点,我的项目被分成三个独立的项目/命名空间:
Model:包含数据类(例如class.cs)ViewModel:包含Command实现及视图模型(例如VMClass.cs、VMMainWindow.cs)View(主项目):引用ViewModel项目的XAML UI
问题描述
尽管我的 DataContext 已在XAML中正确设置,绑定也没有在输出中显示错误,但 Command 里面的逻辑从未被执行。
以下是我的代码:
// Inside ViewModel Project
public class Command : ICommand
{
private Action<object> action;
public Command(Action<object> action) { this.action = action; }
public bool CanExecute(object parameter) => true;
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
// I suspect this is the culprit:
if (parameter != null)
{
action(parameter);
}
}
}
在我的XAML视图标记中,我已将视图模型链接为命名空间,并像下面这样设置 DataContext:
<Window.DataContext>
<vm:VMMainWindow />
</Window.DataContext>
<Button Content="Execute" Command="{Binding ButtonCommand}" />
问题
- 在泛型
Command类中进行这个if (parameter != null)的检查是不是一个不好的做法? - 当没有提供任何
CommandParameter时,应该如何处理?
解决方案
在通用Command类中进行这个if (parameter != null) 检查是不是一个不好的做法?
通过包含空值检查,您强制用户设置或绑定按钮的 CommandParameter 属性。依我之见,大多数命令并不使用或从任何参数中获益。因此我会认为这得不偿失。
当没有提供CommandParameter时,应该如何处理?
只需将参数对象传递给你的action委托。如果该action的实现需要参数,它会处理这样的参数,或许会有一个 Debug.Assert 来提醒开发者出现的错误。如果你不需要参数,可以在实现中忽略它。
我选择为了简单起见,使用一个不带任何参数的 Action 委托。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。