我正在研究基于MVVM模式的UWP应用程序。用于绑定UI动作的我正在VM中使用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
我应该采用哪种方法
答案 0 :(得分:0)
第一种方法是正确的。
您为什么要删除对System.Windows.Input
的引用?那只是名称空间,实际的项目引用是与平台无关的System.dll
。
答案 1 :(得分:0)
为简单起见,我更喜欢在RelayCommands上使用x:Bind,只要您在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();
}