gpt4 book ai didi

c# - RaiseCanExecuteChanged 在编译的 exe 中不起作用,但在调试时起作用

转载 作者:行者123 更新时间:2023-12-03 10:45:03 25 4
gpt4 key购买 nike

我绝对有没有知道是什么原因造成的。

背景:使用 Prism 框架

  1. I have a button bound to a DelegateCommand
  2. I call RaiseCanExecuteChanged


当我在 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我绑定(bind)到 CanExecuteButton 的 Button 中的属性……无济于事。

最佳答案

我在未调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com