Лучшая практика RelayCommand [закрыто]C#

Место общения программистов C#
Anonymous
Лучшая практика RelayCommand [закрыто]

Сообщение Anonymous »

Я работаю с RelayCommands (они находятся в отдельном классе) уже около месяца, и у меня возникло ощущение, что они довольно неуклюжи при их объявлении. Ниже я могу придумать 3 способа объявления RelayCommand.

В первом случае я объявляю свой ICommand, а затем, когда ViewModel загружается, я создаю свой RelayCommand, который указывает на метод в моем коде.

public class MyViewModel
{
public ICommand MyCommand { get; private set; }

public MyViewModel()
{
MyCommand = new RelayCommand(MyMethod, CanMyMethod);
}

private void MyMethod()
{
// Do something here ...
}

private bool CanMyMethod()
{
return string.IsNullOrEmpty(MyString) ? false : true;
}
}


Второй способ — сделать все сразу.

public ICommand MyCommand
{
get
{
return new RelayCommand(
() =>
{
// Do something here ...
},
() =>
string.IsNullOrEmpty(MyString) ? false : true);
}
}


Теперь я планирую написать приложение с некоторыми командами в определенной ViewModel. Я также не могу разделить ViewModel на более мелкие ViewModel, потому что все элементы управления должны работать вместе.

Итак, мои вопросы:
  • Каков наилучший подход к объявлению и созданию ICommands? Это один из моих подходов или есть более простой способ?
  • Насколько сложно поддерживать обзор каждого подхода, учитывая, что в одной модели представления содержится более 50 ICommands.
  • Я надеюсь в будущем выпустить свое приложение как для Windows 7, 8, так и для 10. Существуют ли какие-либо ограничения для RelayCommands, которые я должен учитывать, если использую только .NET4.5?
  • Помимо RelayCommands я также нашел этот проект: Caliburn-Micro. Это позволяет вам сделать что-то вроде кода ниже. Есть ли у кого-нибудь идеи, насколько хорошо это работает с точки зрения производительности по сравнению с RelayCommands? Это всего лишь дополнительный вопрос, на который не требуется отвечать, чтобы сообщение было помечено как ответ.
Xaml (Просмотр)




Модель просмотра

public bool CanLogin(string username, string password)
{
return !String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password);
}

public string Login(string username, string password)
{
...
}

Вернуться в «C#»