. net core 3.1 вставка CommandManager-class в проект библиотеки классов - PullRequest
0 голосов
/ 28 февраля 2020

В настоящее время я пытаюсь перенести MVVM-библиотеку, которую я создал несколько лет назад, с go с. NET 4.5 на. NET Core 3.1. Это прошло на удивление хорошо, но в данный момент я борюсь с CommandManager-Class, который я использую в своем RelayCommand-Class.

Я использую CommandManager для обработчика событий CanExecute моего RelayCommand-Class:

public class RelayCommand : ICommand
{
    #region Properties
    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;
    #endregion

    #region Constructors

    public RelayCommand(Action<object> execute) : this(execute, null)
    {

    }

    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");

        _execute = execute;
        _canExecute = canExecute;
    }
    #endregion

    #region ICommand Members

    [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);
    }

    #endregion
}

Во время исследования этой проблемы я обнаружил, что система. Windows .Вход не является частью. NET Core. Есть много решений, которые рекомендуют переключить Projecttarget с Classlibrary на WPF-приложение или встроить PresentationCore-Assembly.

Эти решения не сработали для меня - в основном, я полагаю, из-за моего использования обычного. NET Core Classlibrary Project.

Итак, я хотел бы спросить, существует ли их аналогичный класс внутри. NET Core? Или было бы лучше, если я попытаюсь кодировать свой собственный CommandManager-Class, чтобы заменить его?

В настоящее время последним вариантом было бы извлечь Commanding-часть из моей библиотеки и поместить ее непосредственно в проект, который использует библиотека (клиентское приложение avalonia). Но это не так ...

С уважением

GeoCoder

1 Ответ

1 голос
/ 01 марта 2020

Измените файл .csproj на этот:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

</Project>
...