将RelayCommand(CommandManager)从.Net Framework移至.NET Core v3.0.100-preview3

时间:2019-04-03 14:02:58

标签: c# .net-core relaycommand .net-core-3.0

我的RelayCommand包含.net核心3预览版3未知的CommandManager的实现。但是,Microsoft说它可用:see here

Dependencies

我安装/卸载了.Net Core并重新启动了Visual Studio 2019预览版,但没有成功。操作系统是Windows 10 x64。

    public class RelayCommand : ICommand
        {

            readonly Action<object> _execute;
            readonly Predicate<object> _canExecute;


            public RelayCommand(Action<object> execute) : this(execute, null) { }
            public RelayCommand(Action<object> execute, Predicate<object> canExecute)
            {
                _execute = execute ?? throw new 
                ArgumentNullException("execute"); _canExecute = canExecute;
            }

            [DebuggerStepThrough]
            public bool CanExecute(object parameter)
            {
                return _canExecute == null ? true : _canExecute(parameter);
            }
            public event EventHandler CanExecuteChanged 
            {
                add { CommandManager.RequerySuggested += value; }
                remove { CommandManager.RequerySuggested -= value; }
            }
            public void Execute(object parameter) { _execute(parameter); }

    }

2 个答案:

答案 0 :(得分:1)

我在WPF应用程序中为命令使用了类库,但是CommandManager不存在,即使文档指出它位于.NET Core中,也位于System.Windows.Input中。

感谢Col,我可以通过将输出类型从“类库”更改为Windows应用程序来使其工作:
Class Library Windows Application

右键单击您的项目>属性>应用程序

答案 1 :(得分:0)

有点晚了,但其他人可能会受益。

这是针对.NET Core 3.0预览版6

我通过Nu进行安装将以下内容导入WPF UI项目:

Microsoft.NETCore.Platforms Version =“ 3.0.0-preview6.19303.8”

Microsoft.NETCore.Targets Version =“ 3.0.0-preview6.19303.8”

Microsoft.WindowsDesktop.App版本=“ 3.0.0-preview6-27804-01”

然后可以使用System.Windows.Input.CommandManager。

您应该已经拥有SDK,即Microsoft.NETCore.App(3.0.0-preview6-27804-01)