RowCellMenuCustomizations 实现 Command 绑定
给GridControl的行数据单元格添加菜单项,并通过Command绑定的方式实现菜单点击动作触发:
<dxg:GridControl x:Name="mainGrid" ItemsSource="{Binding TableDataSource}">
<dxg:GridColumn Header="A" FieldName="A"/>
<dxg:GridColumn Header="B" FieldName="B"/>
<dxg:GridColumn Header="C" FieldName="C"/>
<dxg:GridColumn Header="D" FieldName="D"/>
<dxg:GridColumn Header="E" FieldName="E"/>
<dxg:GridControl.View>
<dxg:TableView x:Name="tvTable" ShowGroupPanel="False" AllowColumnFiltering="False"
AllowedGroupFilters="None" AllowGrouping="False"
ShowIndicator="False" AllowSorting="False"
AllowEditing="False" AllowFilterEditor="False">
<dxg:TableView.RowCellMenuCustomizations>
<dxb:BarButtonItem Name="DataHeader"
Content="数据头"
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetDataHeaderCommand, RelativeSource={RelativeSource Self}}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}" >
</dxb:BarButtonItem>
<dxb:BarButtonItem Name="DataBegin" Content="数据开始"
Command="{Binding Path=DataContext.SetDataBeginCommand,ElementName=mainGrid}"
CommandParameter="{Binding ElementName=tvTable, Path=FocusedRowHandle}">
</dxb:BarButtonItem>
</dxg:TableView.RowCellMenuCustomizations>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
上面的两个命令绑定分别使用两种方式实现DataContext的绑定:
注:前提条件是:待绑定的Command和需要寻找的元素的DataContext是同一个才适用。
1. 通过 DataControlBase.ActiveView 附加属性来将当前命令的上下文绑定到 tvTable 的数据上下文上;
Command="{Binding Path=(dxg:DataControlBase.ActiveView).DataContext.SetDataHeaderCommand, RelativeSource={RelativeSource Self}}"
2. 通过 定义 ElementName 的当时,寻找指定元素的DataContext作为数据上下文绑定的方式:
Command="{Binding Path=DataContext.SetDataBeginCommand,ElementName=mainGrid}"
方式二也是一般常用方式,适用于多层级的子元素的数据上下文绑定。
注意:不管是方式一还是方式二,“DataContext” 都不能少,否则会提示找不到对应的 Command;