繁体   English   中英

奇怪的行为onCanExecute RelayCommand MVVMLight 5+

[英]Odd behaviour onCanExecute RelayCommand MVVMLight 5+

我正在将一个工具从MVVM Light 4.0.3迁移到5.4.1,我发现最新的RelayCommand实现有一个非常奇怪的问题。

这是V4.0.3中的旧实现:

IMG1

IMG2

这是V5.4.1中的最新实现:

IMG4

IMG3

在我能够使用变量来定义canExecute行为(启用按钮)之前,使用以下代码:

public ICommand GetNewItemsFromDB { get; private set; }

private bool _IsActive;
public bool IsActive
{
    get
    {
        return _IsActive;
    }
    set
    {
        if (_IsActive != value)
        {
            _IsActive = value;
            this.RaisePropertyChanged(() => IsActive);
        }
    }
}

GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; });

private void GetDataFromDB()
{
    IsActive = true;
}

之前的代码能够在MVVM Light 4.0.3中启用按钮而没有任何问题; 但是,在最新的实现总是被禁用,我添加了一点,因为有一个新的keepTargetAlive定义:

GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; }, true);

此外,我尝试了错误的选项,没有任何改变。 我发现重新启用它的唯一方法是设置一个像这样的预定义值:

GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => true, true);

在我的情况下,这种实现将毫无用处,因为RelayCommand依赖于变量IsActive ,它决定了它是否被启用。 有什么我应该在V5中改变它以使其工作? 谢谢你的建议。

如果我正确理解这一点。

如果您在WPF4.5或更高版本中使用此类,则需要使用GalaSoft.MvvmLight.CommandWpf命名空间(而不是GalaSoft.MvvmLight.Command )。 这将启用(或恢复)CommandManager类,该类根据CanExecute委托处理控件的自动启用/禁用。

并在发行说明中:

问题7659的重要说明 :为了解决不再禁用控件的问题,具体取决于RelayCommand.CanExecute委托的状态,您需要对代码进行一些小的更改。 要选择加入固定行为,请将您使用的命名空间从GalaSoft.MvvmLight.CommandGalaSoft.MvvmLight.CommandWpf

我没记错,在古代历史的某个地方,我必须自己做一个项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM