В WPF как связать в DataGrid.RowDetailsTemplate? - PullRequest
0 голосов
/ 21 марта 2011

У меня есть DataGrid, который связан с ObservableCollection пользовательского класса.Коллекция является свойством ViewModel, и сетка работает нормально, в том числе с изменениями в коллекции.

Я хочу использовать RowDetailsTemplate для отображения двух дополнительных коллекций в StackPannel, например:

        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Name="GrcidSP" Orientation="Horizontal">
                    <DataGrid Name="ClusterIndexGrid" AutoGenerateColumns="True" 
                              ItemsSource="{Binding ClusterIndexColumns}"
                              CanUserAddRows="False" CanUserResizeRows="False"
                              Width="Auto"/>
                    <DataGrid Name="IndexGrid" AutoGenerateColumns="True" 
                              ItemsSource="{Binding IndexColumns}"
                              CanUserAddRows="False" CanUserResizeRows="False"
                              Width="Auto"/>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

ClusterIndexColumns и IndexColumns, источники привязки внутренних сеток, также являются коллекциями в ViewModel.

Проблема в том, что когда я отображаю детали строк, сетки данных пусты, то есть не загружаются вообще, без столбцов или строк.

Чтобы понять, что происходит, я заменилвнутренние сетки данных с меткой:

        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Name="GridSP" Orientation="Horizontal">
                    <Label Content="{Binding}" Width="Auto" Background="AliceBlue"/>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

и не указан источник привязки - {Binding}

Теперь в метке отображается имя пользовательского класса, который находится в коллекции, являющейся источникомвнешней сетки.

Так или иначе, мне нужно вернуться обратно к ViewModel в качестве контекста данных для внутренних сеток.

Но как, молитесь, скажите?

1 Ответ

0 голосов
/ 23 марта 2011

ОК, поэтому я решил эту проблему, добавив коллекции ClusterIndexColumns и IndexColumns в качестве свойств к пользовательскому классу, который отображается в основной сетке. Теперь, когда я нажимаю на строку, открывается область rowdetails, и внутренние сетки загружаются нормально.

Кстати, коллекции заполняются, когда выбранная строка изменяется в основной сетке, путем привязки свойства SelectedIndex к свойству в ViewModel, используя

Mode=OneWayToSource

Надеюсь, это кому-нибудь поможет.

...