Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CanExecute RelayCommand MVVMLight 5+的异常行为;_C#_Wpf_.net 4.5_Mvvm Light_Relaycommand - Fatal编程技术网

C# CanExecute RelayCommand MVVMLight 5+的异常行为;

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,

我正在将一个工具从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, () => { 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谢谢!你太棒了!谢谢你太棒了!