C# CanExecute RelayCommand MVVMLight 5+的异常行为;
我正在将一个工具从MVVM Light 4.0.3迁移到5.4.1,我发现最新的RelayCommand实现存在一个非常奇怪的问题 这是V4.0.3中的旧实现:C# CanExecute RelayCommand MVVMLight 5+的异常行为;,c#,wpf,.net-4.5,mvvm-light,relaycommand,C#,Wpf,.net 4.5,Mvvm Light,Relaycommand,我正在将一个工具从MVVM Light 4.0.3迁移到5.4.1,我发现最新的RelayCommand实现存在一个非常奇怪的问题 这是V4.0.3中的旧实现: GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; }, true); 这是V5.4.1中的最新实现: GetNewItemsFromDB = new RelayCommand(GetDataFromDB,
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; }, true);
这是V5.4.1中的最新实现:
GetNewItemsFromDB = new RelayCommand(GetDataFromDB, () => { return IsActive == false; }, true);
在我能够使用变量定义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中更改什么以使其正常工作吗?谢谢你的建议。如果我理解正确的话 如果在WPF4.5或更高版本中使用此类,则需要使用
GalaSoft.MvvmLight.CommandWpf
namespace(而不是
GalaSoft.MvvmLight.Command
)。这将启用(或恢复)
CommandManager类,用于处理自动启用/禁用
基于CanExecute委托的控件
在发行说明中:
关于问题7659的重要注意事项:为了解决问题
控件不再被禁用,这取决于控件的状态
RelayCommand.CanExecute委托,您需要对
你的密码。若要选择加入固定行为,请更改
您正在使用的命名空间来自GalaSoft.MvvmLight.Command
to
GalaSoft.MvvmLight.CommandWpf
我记得没错,在古代历史的某个地方,为了一个项目,我不得不自己做这件事。如果我理解正确的话 如果在WPF4.5或更高版本中使用此类,则需要使用
GalaSoft.MvvmLight.CommandWpf
namespace(而不是
GalaSoft.MvvmLight.Command
)。这将启用(或恢复)
CommandManager类,用于处理自动启用/禁用
基于CanExecute委托的控件
在发行说明中:
关于问题7659的重要注意事项:为了解决问题
控件不再被禁用,这取决于控件的状态
RelayCommand.CanExecute委托,您需要对
你的密码。若要选择加入固定行为,请更改
您正在使用的命名空间来自GalaSoft.MvvmLight.Command
to
GalaSoft.MvvmLight.CommandWpf
我记得没错,在古代的某个地方,我不得不为一个项目自己做这件事。你在RelayCommand上使用什么名称空间?嗨@General GalaSoft.MvvmLight.command你在RelayCommand上使用什么名称空间?嗨@General GalaSoft.MvvmLight.command谢谢!你太棒了!谢谢你太棒了!