RaiseCanExecuteChanged

RaiseCanExecuteChanged

我绝对不知道是什么原因。

背景:使用 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/

10-13 03:24