使用DevExpress Master-Detail网格,我如何绑定到子网格中的SelectedItem
本文关键字:网格 绑定 SelectedItem Master-Detail DevExpress 何绑定 使用 | 更新日期: 2023-09-27 17:50:18
注:此条目的类型为"分享您的知识,问答Style"。我在下面回答我自己的问题
不幸的是,在带有Master-Detail的DevExpress网格中,SelectedItem
不能在子网格上工作。
如何确定子网格中选择了哪个项目?
这已被取代:-
请注意,这种方法是过时的从15.1版本开始,在那里绑定主网格和细节网格的选择的能力是开箱即用的。从那个版本开始,直接绑定CurrentItem/SelectedItem/SelectedItems属性,就像Master-detail grid中描述的那样——添加绑定选择和导航属性的功能。
主-细节网格的以下属性现在支持绑定:
SelectedItem
,CurrentItem
,SelectedItems
。指定DataControlDetailDescriptor.ParentPath
属性或处理DataControlDetailDescriptor.CustomGetParent
事件以启用从ViewModel到网格的绑定。
注:此条目的类型为"分享您的知识,问答风格"。
经过一段时间的挣扎,我发现解决这个问题的最好方法是创建自己的附加属性,按照这些说明:
https://www.devexpress.com/Support/Center/Example/Details/E4402 下面是一些示例代码,展示了它是如何工作的。方法取决于DevExpress库的版本,如上面的链接所示。<grid:GridControl x:Name="BasketSearchBasketGrid" ItemsSource="{Binding Path=Baskets}" ToolTip="Double click to show details.">
<grid:GridControl.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding Path=SelectRowCmd}"/>
</grid:GridControl.InputBindings>
<grid:GridControl.View>
<grid:TableView x:Name="view" AllowPerPixelScrolling="True" AutoWidth="True" NewItemRowPosition="None"
DetailHeaderContent="Search Results"
NavigationStyle="Row"
ShowFixedTotalSummary="False"
ShowGroupPanel="True"
ShowGroupedColumns="True"
ShowAutoFilterRow="false"
FadeSelectionOnLostFocus="False"
ShowIndicator="False"
BestFitMode="AllRows">
<i:Interaction.Behaviors>
<!-- We could use SelectedRow, however, to keep things consistent with the way child rows work, use this
instead. -->
<devExpressBehaviour:MasterFocusedRowBehavior FocusedRow="{Binding SelectedBasket, Mode=TwoWay}" />
</i:Interaction.Behaviors>
</grid:TableView>
</grid:GridControl.View>
<grid:GridControl.Columns>
<grid:GridColumn Header="Basket Name" FieldName="BasketName" MinWidth="60"/>
<grid:GridColumn Header="BasketStyle" FieldName="BasketStyle" MinWidth="40"/>
</grid:GridControl.Columns>
<grid:GridControl.DetailDescriptor>
<dxg:DataControlDetailDescriptor ItemsSourcePath="Orders" ShowHeader="False">
<grid:GridControl x:Name="BasketSearchOrderGrid" Tag="orderDetails"
>
<grid:GridControl.Columns>
<grid:GridColumn Header="Side" FieldName="Side" MinWidth="20"/>
<!-- More columns here -->
</grid:GridControl.Columns>
<grid:GridControl.View>
<dxg:TableView ShowGroupPanel="False">
<i:Interaction.Behaviors>
<!-- DevExpress does not support SelectedRow on a child grid. Use this custom behavior instead. -->
<devExpressBehaviour:DetailFocusedRowBehavior FocusedRow="{Binding SelectedOrder, Mode=TwoWay}" />
</i:Interaction.Behaviors>
</dxg:TableView>
</grid:GridControl.View>
</grid:GridControl>
</dxg:DataControlDetailDescriptor>
</grid:GridControl.DetailDescriptor>
</grid:GridControl>
关键是这些行,在子网格的<TableView>
选项卡内。这些有效地用实际工作的附加属性代替了跟踪所选项(即SelectedItem
)的非工作方法。
<i:Interaction.Behaviors>
<!-- DevExpress does not support SelectedRow on a child grid. Use this custom behavior instead. -->
<devExpressBehaviour:DetailFocusedRowBehavior FocusedRow="{Binding SelectedOrder, Mode=TwoWay}" />
</i:Interaction.Behaviors>
请DevExpress,让我们轻松,这应该只是工作!