Я работаю над приложением UWP, основанным на шаблоне MVVM. для привязки действий пользовательского интерфейса я использую ICommand в виртуальной машине, для которой мне нужно предоставить ссылку на Windows.Input. Является ли это нарушением MVVM.
Если я создам класс, реализующий интерфейс ICommand, и использую его для привязки команд, то это нарушит правило «Кодирование для интерфейсов».
//This is what i am doing currently
public ICommand command;
command = new RelayCommand();
// I have tried this to remove the reference of windows.input from the VM
public RelayCommand command;
command = new RelayCommand();
//isn't it breaking the rule of coding to interfaces
Какому подходу я должен следовать
Первый способ правильный.
Почему вы пытаетесь удалить ссылку на System.Windows.Input
? Это просто пространство имен, фактическая ссылка на проект относится к System.dll
, которая не зависит от платформы.
Я предпочитаю использовать x:Bind вместо RelayCommands для простоты, если вы установили свою модель представления в файле view.cs, вы можете просто привязать обработчик для события.
SessionView.xaml.cs:
Tapped = "{x:Bind Path=ViewModel.CancelClick}"
SessionView.cs
public SessionViewModel ViewModel { get; set; }
public SessionView() => this.InitializeComponent();
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var prms = (WindowParameters)e.Parameter;
prms.Frame = this.Frame;
this.ViewModel = new SessionViewModel(prms);
this.DataContext = ViewModel;
this.ViewModel.LoadFullModel();
}