使用Windows.Input的引用在VM中使用ICommand

时间:2019-05-28 04:38:19

标签: c# wpf mvvm uwp

我正在研究基于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

我应该采用哪种方法

2 个答案:

答案 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();
    }