我正在将工具从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);
此外,我尝试了 false 选项,但没有任何更改。我发现重新启用它的唯一方法是设置一个像这样的预定义值:
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => true, true);
在我的情况下,此实现将无用,因为RelayCommand依赖于变量 IsActive ,该变量确定是否启用了该变量。我应该在 V5 中进行哪些更改以使其正常工作吗?感谢您的建议。
答案 0 :(得分:3)
如果我正确理解这一点。
如果您在WPF4.5或更高版本中使用此类,则需要使用
GalaSoft.MvvmLight.CommandWpf
命名空间(而不是GalaSoft.MvvmLight.Command
)。这将启用(或还原) CommandManager类,用于自动启用/禁用 基于CanExecute委托的控件。
在发行说明中:
关于问题7659的重要说明:为了解决该问题, 控件不再被禁用,具体取决于 RelayCommand.CanExecute委托,您需要对 您的代码。要选择加入固定行为,请更改 从
GalaSoft.MvvmLight.Command
到的命名空间GalaSoft.MvvmLight.CommandWpf
。
我没记错,在古代历史中,我必须自己做一个项目。