如何在添加到View的ViewModel中创建一个命令?

时间:2017-05-02 16:40:26

标签: c# wpf

在以下相关问题中,我询问了如何创建要在视图上使用的自定义项目:

Can I make this block of XAML into a reusable "control"?

效果很好,现在我按照自己的意愿展示了这些项目。但是,我没有Command属性或Click事件用于捕获项目上的鼠标单击。我希望我的ViewModel能够对点击作出反应。

我尝试过的任何东西都无法在XAML中公开命令/事件(等)。我转到对象的代码,但没有显示在那里使用:

<vm:BackstageClickableItemViewModel x:Name="btnApplicationLog" FileName="Application Log" ImageSource="{dx:DXImageOffice2013 Image=Windows_16x16.png}" />

基本上,我得到ViewModel公开的属性,就是这样。我怎样才能得到一些可以附加行为的东西?

2 个答案:

答案 0 :(得分:1)

将命令插入自定义用户控件的XAML中,在ViewModelBase中创建命令

public abstract class ViewModelBase : INotifyPropertyChanged
{

    public virtual ICommand MyCommand => new RelayCommand(MyClick);

    protected virtual void MyClick(object o)
    {
        //Nothing here, just exists to be overriden
    }
}

现在您需要做的就是在视图中覆盖您的命令

public class MyViewModel: ViewModelBase
{
    protected override void MyClick(object o)
    {
        //Your click logic here
    }
}

答案 1 :(得分:0)

要在XAML中执行此操作:

  <vm:BackstageClickableItemViewModel x:Name="btnApplicationLog" FileName="Application Log" ImageSource="{dx:DXImageOffice2013 Image=Windows_16x16.png}" >
    <vm:BackstageClickableItemViewModel.InputBindings>
      <MouseBinding Command="{Binding myCommand}" MouseAction="LeftClick"/>
    </vm:BackstageClickableItemViewModel.InputBindings>
  </vm:BackstageClickableItemViewModel>

其中myCommand是ViewModel中的ICommand对象。

这实际上将命令绑定到鼠标左键单击整个用户控件。