1. 在ViewModel中弹出消息提示框,需要添加下面的代码块:

    <dxmvvm:Interaction.Behaviors>
<dx:DXMessageBoxService />
</dxmvvm:Interaction.Behaviors>

在ViewModel中的调用方式是:

        public virtual void ShowRowDetails(SampleData obj)
{
MessageBoxService.Show(obj.ToString(), "Row Details");
}

2. 将鼠标双击事件绑定到ViewModel中的 ShowRowDetails 的方式是:

<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="MouseDoubleClick"
Command="{Binding ShowRowDetailsCommand}"
PassEventArgsToCommand="True">
<dxmvvm:EventToCommand.EventArgsConverter>
<dx:EventArgsToDataRowConverter/>
</dxmvvm:EventToCommand.EventArgsConverter>
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>

注意: 在xaml 代码中的命令带Command后缀,在ViewModel中不需要。

<UserControl x:Class="EventToCommandExample.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:ViewModels="clr-namespace:EventToCommandExample.ViewModels"
xmlns:localConverters="clr-namespace:EventToCommandExample.Converters"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="600"
DataContext="{dxmvvm:ViewModelSource Type={x:Type ViewModels:MainViewModel}}">
<dxmvvm:Interaction.Behaviors>
<dx:DXMessageBoxService />
</dxmvvm:Interaction.Behaviors>
<Grid>
<Grid.Resources>
<localConverters:ReviewResultRowBackColorConverter x:Key="reviewResultRowBackColorConverter"></localConverters:ReviewResultRowBackColorConverter>
<localConverters:String2BoolConverter x:Key="string2BoolConverter"></localConverters:String2BoolConverter>
<Style x:Key="optimizedRowStyle" TargetType="{x:Type dxg:RowControl}">
<Setter Property="Background" Value="{Binding Row.Mandatory, Converter={StaticResource reviewResultRowBackColorConverter}}"/>
</Style>
<Style x:Key="barButtonItemStyle" TargetType="dxb:BarButtonItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Row.Row.Mandatory,Converter={StaticResource string2BoolConverter}}" Value="false">
<Setter Property="IsVisible" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<dx:DXTabControl>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="SelectionChanged"
Command="{Binding SelectedTabIndexChangedCommand}"
PassEventArgsToCommand="True">
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
<dx:DXTabItem Header="Test">
<dxg:GridControl ItemsSource="{Binding GridData}" AutoGenerateColumns="AddNew">
<dxg:GridControl.Columns>
<dxg:GridColumn Header="ID" FieldName="ID"></dxg:GridColumn>
<dxg:GridColumn Header="Text" FieldName="Text"></dxg:GridColumn>
<dxg:GridColumn Header="Value" FieldName="Value"></dxg:GridColumn>
<dxg:GridColumn Header="Mandatory" FieldName="Mandatory"></dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView x:Name="tvTable" RowStyle="{StaticResource optimizedRowStyle}">
<dxg:TableView.RowCellMenuCustomizations>
<dxb:BarButtonItem Content="DB Owner"
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}"
dxb:BarManager.ShowGlyphsInPopupMenus="False"
Style="{StaticResource barButtonItemStyle}">
</dxb:BarButtonItem>
<dxb:BarButtonItem Content="Table Name" IsVisible="{Binding Row.Row.Mandatory,Converter={StaticResource string2BoolConverter}}"
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
</dxb:BarButtonItem>
<dxb:BarButtonItem Content="DataHeader"
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataHeaderCommand, RelativeSource={RelativeSource Self}}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
</dxb:BarButtonItem>
<dxb:BarButtonItem Content="DataBegin"
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetTableDataBeginCommand, RelativeSource={RelativeSource Self}}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
</dxb:BarButtonItem>
</dxg:TableView.RowCellMenuCustomizations>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="MouseDoubleClick"
Command="{Binding ShowRowDetailsCommand}"
PassEventArgsToCommand="True">
<dxmvvm:EventToCommand.EventArgsConverter>
<dx:EventArgsToDataRowConverter/>
</dxmvvm:EventToCommand.EventArgsConverter>
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
</dx:DXTabItem>
<dx:DXTabItem Header="Testtab">
<dxg:GridControl ItemsSource="{Binding GridData}" AutoGenerateColumns="AddNew">
<dxg:GridControl.View>
<dxg:TableView>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="MouseDoubleClick"
Command="{Binding ShowRowDetailsCommand}"
PassEventArgsToCommand="True">
<dxmvvm:EventToCommand.EventArgsConverter>
<dx:EventArgsToDataRowConverter/>
</dxmvvm:EventToCommand.EventArgsConverter>
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
</dx:DXTabItem>
</dx:DXTabControl>
</Grid>
</UserControl>

完整实例下载

WPF 事件实现MVVM中的Command绑定的更多相关文章

  1. WPF中的Command事件绑定

    在项目中使用Command绑定能够使我们的代码更加的符合MVVM模式.不了解的同学可能不清楚,只有继承自ButtonBase类的元素才可以直接绑定Command(Button.CheckBox.Rad ...

  2. WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参

    原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataC ...

  3. 游戏框架设计中的。绑定binding。。。命令 command 和消息message 以及MVVM

    游戏框架设计中的.绑定binding...命令 command 和消息message

  4. wpf mvvm datagrid DataGridTemplateColumn的绑定无效的可能原因之一!

    昨天在mvvm wpf的开发中遇到一个问题,绑定不起作用,编辑阶段没问题也没有提示找不到对应的绑定,但是在运行之后却不起作用,查了很多资料,说法不一,有些是要删除datagrid的一行,直接绑定del ...

  5. WPF Prism MVVM 中 弹出新窗体. 放入用户控件

    原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ...

  6. WPF中DatePiker值绑定以及精简查询

    WPF中DatePiker值绑定以及精简查询 1.WPF中DatePiker值绑定 Xaml中值绑定使用Text <DatePicker Text="{Binding strMinDa ...

  7. 总结:WPF中模板需要绑定父级别的ViewModel该如何处理

    原文:总结:WPF中模板需要绑定父级别的ViewModel该如何处理 <ListBox ItemsSource="{Binding ClassCollection}"> ...

  8. .NET CORE(C#) WPF简单菜单MVVM绑定

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF简单菜单MVVM绑定 阅读导航 本文背景 代码实现 本文参考 ...

  9. jquery中取消和绑定hover事件的正确方式

    在网页设计中,我们经常使用jquery去响应鼠标的hover事件,和mouseover和mouseout事件有相同的效果,但是这其中其中如何使用bind去绑定hover方法呢?如何用unbind取消绑 ...

  10. WPF 列表控件中的子控件上下文绑定

    <DataGrid Grid.ColumnSpan=" Height="Auto" SelectedItem="{Binding Path=SelectP ...

随机推荐

  1. 下列哪个选项是对MTU的正确计算方式?

    A.   IP数据包头部 + TCP数据报头部 + 数据 B.   MAC头 + IP头 + TCP头 + 数据 C.   MAC头 + IP头 + TCP头 + 数据 + FCS D.   前同步码 ...

  2. postgres

    10.67 su - app  docker pull postgres:12.15  docker run -d --name pgsql12 -p 5432:5432 -e "POSTG ...

  3. maven:Could not transfer artifact from/to maven-default-http-blocker (http://0.0.0.0/): Blocked m...

    今天在拉完项目后拉取包的过程中,maven报错: Could not transfer artifact from/to 对应的包 maven-default-http-blocker (http:/ ...

  4. 永久告别mac屏幕涂层脱落

    转载:https://www.feng.com/post/11380203 我从2011年开始使用Mac book pro电脑,到现在的2016款已经是第三台了,我从来都不会被涂层脱落这个问题困扰,我 ...

  5. jacoco代码覆盖率报告分析

    一.目的 对Jacoco代码覆盖率统计维度.报告字段说明.报告详细分析描述.并为精准测试.健壮性测试提供指导. 二.Jacoco代码覆盖率统计维度 Jacoco是从代码指令(Instructions, ...

  6. Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓

    一.前言 随着监控行业的发展,越来越多的用户场景是需要在手机上查看监控,而之前主要的监控系统都是在PC端,毕竟PC端屏幕大,能够看到的画面多,解码性能也强劲.早期的手机估计性能弱鸡,而现在的手机性能不 ...

  7. Qt/C++音视频开发58-逐帧播放/上一帧下一帧/切换播放进度/实时解码

    一.前言 逐帧播放是近期增加的功能,之前也一直思考过这个功能该如何实现,对于mdk/qtav等内核组件,可以直接用该组件提供的接口实现即可,而对于ffmpeg,需要自己处理,如果有缓存的数据的话,可以 ...

  8. Qt编写可视化大屏电子看板系统20-横向分组图

    一.前言 横向分组图是柱状分组图的横向展示,有了横向柱状图加上分组图的绘制经验,这个做起来就比较简单了,横向的设置规则按照横向柱状图来,分组的规则按照柱状分组图的算法来,在横向的柱子中要绘制对应的值, ...

  9. Qt音视频开发48-通用通道管理

    一.前言 把通用的视频控件搞定以后,后期增加新的内核方便多了,不需要在好多个文件复制粘贴之类的,接下来就是需要一个统一的类来管理视频监控系统中的16个通道或者32个通道,甚至64个通道也有可能,当然, ...

  10. Qt开源作品4-网络调试助手

    一.前言 网络调试助手和串口调试助手是一对的,用Qt开发项目与硬件通信绝大部分都是要么串口通信(RS232 RS485 Modbus等),要么就是网络通信(TCP UDP HTTP等),所以一旦涉及到 ...