在以下相关问题中,我询问了如何创建要在视图上使用的自定义项目:
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公开的属性,就是这样。我怎样才能得到一些可以附加行为的东西?
答案 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
对象。
这实际上将命令绑定到鼠标左键单击整个用户控件。