【发布时间】:2018-07-02 09:14:05
【问题描述】:
我正在将一个工具从 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 中进行更改以使其正常工作?感谢您的建议。
【问题讨论】:
-
RelayCommand 使用什么命名空间?
-
嗨@TheGeneral GalaSoft.MvvmLight.Command
标签: c# wpf .net-4.5 mvvm-light relaycommand