[英]Odd behaviour onCanExecute RelayCommand MVVMLight 5+
我正在将一个工具从MVVM Light 4.0.3迁移到5.4.1,我发现最新的RelayCommand实现有一个非常奇怪的问题。
这是V4.0.3中的旧实现:
这是V5.4.1中的最新实现:
在我能够使用变量来定义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.Command
为GalaSoft.MvvmLight.CommandWpf
。
我没记错,在古代历史的某个地方,我必须自己做一个项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.