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;

 

posted on 2020-11-04 10:28  积跬步---行千里  阅读(142)  评论(0编辑  收藏  举报