2015-05-21 1 views
2

Примечание: Данная запись относится к типу «Поделитесь своими знаниями, Q & A Style». Я отвечаю на свой вопрос ниже.С сеткой Master-Detail DevExpress, как мне привязать к SelectedItem в дочерней сетке?

К сожалению, в сетке DevExpress с Master-Detail, SelectedItem не работает на дочерней сетке.

Как я могу определить, какой элемент выбран в дочерней сетке?

ответ

0

Примечание: Данная запись относится к типу "Поделитесь своими знаниями, Q & A Style". Я отвечу на свой вопрос, выше.

После борьбы с этим на некоторое время, я обнаружил, что лучший способ решить это, чтобы создать свой собственный вложенное свойство, согласно этим инструкциям:

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> 

Please DevExpress, облегчите нам задачу, это должно сработать!

1

This has been superseded: -

Пожалуйста, обратите внимание, что этот подход устарел начиная с версии 15.1, где способность связывать выбор основных и подробных сетках было поддержано из коробки. Начиная с этой версии, привяжите свойства CurrentItem/SelectedItem/SelectedItems напрямую, как описано в Master-detail grid - Add the capability to bind selection and navigation properties.

Следующие свойства мастер-деталь сетки теперь поддерживает связывание: SelectedItem, CurrentItem, SelectedItems. Укажите свойство DataControlDetailDescriptor.ParentPath или обработайте событие DataControlDetailDescriptor.CustomGetParent, чтобы включить привязку из ViewModel в сетку.

Смежные вопросы