В настоящее время я пытаюсь перенести 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