我绝对不知道是什么原因。
背景:使用 Prism 框架
当我在Visual Studio中以 Debug模式启动应用程序时,一切正常。该应用程序运行完美。
然后,我通过.exe打开应用程序时,未调用RaiseCanExecuteChanged
方法。我不知道为什么会这样。还有其他人遇到类似的问题吗?
编辑:当我第一次通过.exe打开应用程序时,就会调用RaiseCanExecuteChanged
(因为我在ViewModel
的构造函数中设置了它)。但是,再也不会调用它了。
如果需要的代码:
private readonly DelegateCommand _buttonCommand;
public ViewModel()
{
_buttonCommand = new DelegateCommand(Button, CanExecuteButton);
}
public DelegateCommand ButtonCommand
{
get { return this._buttonCommand; }
}
public void Button()
{
... do stuff ...
_buttonCommand.RaiseCanExecuteChanged();
}
public bool CanExecuteButton()
{
if (some condition)
return true;
else
return false;
}
<Button x:Name="MyButton" Content="ClickMe"
Command="{Binding ButtonCommand}">
我什至绝望了,试图将
IsEnabled
属性放到我的Button中,但我绑定(bind)到CanExecuteButton
...却无济于事。 最佳答案
我遇到过类似的问题,没有调用Prism DelegateCommand.CanExeuteChanged事件。通过查看源代码,看起来好像是因为它不依赖CommandManager.RequerySuggested
。
尝试制作自己的命令,其中事件CanExecuteChanged如下所示:
public RelayCommand : ICommand
{
private event EventHandler _canExecuteChanged;
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
_canExecuteChanged += value;
}
remove
{
CommandManager.RequerySuggested -= value;
_canExecuteChanged -= value;
}
}
public void RaiseCanExecuteChanged()
{
var handler = _canExecuteChanged;
if (handler != null)
handler(this, EventArgs.Empty);
}
// All the other stuff also
}
现在,如果WPF在UI中检测到更改,则CommandManager将在命令上调用CanExecute。而且,如果应用程序引擎室中的某些内容发生了变化,则可以调用
RaiseCanExecuteChanged
来更新CanExecute。关于c# - RaiseCanExecuteChanged在编译的exe中不起作用,但在调试时起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29997801/