注: このエントリは、「知識を共有する、Q&A スタイル」タイプです。私は以下の私自身の質問に答えます。
残念ながら、Master-Detail を使用する DevExpress グリッドではSelectedItem
、子グリッドでは機能しません。
子グリッドで選択されている項目を確認するにはどうすればよいですか?
注: このエントリは、「知識を共有する、Q&A スタイル」タイプです。私は以下の私自身の質問に答えます。
残念ながら、Master-Detail を使用する DevExpress グリッドではSelectedItem
、子グリッドでは機能しません。
子グリッドで選択されている項目を確認するにはどうすればよいですか?
このアプローチは、マスター グリッドと詳細グリッドの選択をバインドする機能がそのままサポートされていたバージョン 15.1 以降では古くなっていることに注意してください。そのバージョン以降、マスター/ディテール グリッド - 選択およびナビゲーション プロパティをバインドする機能を追加するで説明されているように、CurrentItem/SelectedItem/SelectedItems プロパティを直接バインドします。
マスター/ディテール グリッドの次のプロパティがバインディングをサポートするようになりました:
SelectedItem
、CurrentItem
、SelectedItems
。DataControlDetailDescriptor.ParentPath
プロパティを指定するか、DataControlDetailDescriptor.CustomGetParent
イベントを処理して、ViewModel からグリッドへのバインドを有効にします。
注: このエントリは、「知識を共有する、Q&A スタイル」タイプです。上記の私自身の質問に答えます。
これにしばらく苦労した後、これを解決する最善の方法は、次の手順に従って独自の添付プロパティを作成することであることがわかりました。
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 をお願いします。簡単にしてください。これでうまくいくはずです。