2017-08-31 88 views
0

我有一个查看多个Button s和一样多的Command s。对于每Command我想我将不得不实施ICommand。我的程序将包含一个statemachine,所以命令的CanExecute可能会改变运行时。 的CanExecuteChanged的唯一实现的例子thisCanExecuteChanged的正确实施

public event EventHandler CanExecuteChanged 
{ 
    add { CommandManager.RequerySuggested += value; } 
    remove { CommandManager.RequerySuggested -= value; }  
} 

here中指出,这种实现是一个坏的解决方案。应该使用RaiseCanExecuteChanged()

但我找不到CanExecuteChangedRaiseCanExecuteChanged正确实施。 Here我发现一个基本的例子,但用户称它

是一个非常简单的实现(这可能会偶尔丢一个NullReferenceException)

我更喜欢代码,不以一次抛出异常而。有人有更好的例子吗?

回答

0

您只需要执行一个接口ICommand

你可以看看在RelayCommand类是如何在MvvmLight这是一个受欢迎的,但重量轻MVVM库实现的:https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs

它有一个RaiseCanExecuteChanged()方法,简单地提高了CanExecuteChanged事件。每当你想“刷新”命令时,你都应该调用这个方法。

你甚至可以在你的应用程序直接下载MvvmLight组件和使用RelayCommand类:https://www.nuget.org/packages/MvvmLight/