В первом случае я объявляю свой 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? Это всего лишь дополнительный вопрос, на который не требуется отвечать, чтобы сообщение было помечено как ответ.
Модель просмотра
public bool CanLogin(string username, string password)
{
return !String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password);
}
public string Login(string username, string password)
{
...
}