Детали строки вложенной таблицы данных WPF 3.5 не отображаются в дереве визуалов - PullRequest
0 голосов
/ 14 июня 2011

Итак, я создаю хороший вложенный массив данных, который выглядит примерно так:

<dg:DataGrid x:Name="mainGrid"
                AutoGenerateColumns="False" 
                CanUserAddRows="False"
                AreRowDetailsFrozen="True"
                CanUserReorderColumns="False"
                CanUserResizeColumns="True"
                CanUserResizeRows="False"
                SelectionUnit="FullRow"
                RowDetailsVisibilityMode="VisibleWhenSelected">
                <dg:DataGrid.Columns>
                    <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="36" IsReadOnly="False">
                        <dg:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="+" Width="28" Height="28" />
                            </DataTemplate>
                        </dg:DataGridTemplateColumn.CellTemplate>
                    </dg:DataGridTemplateColumn>
                    <dg:DataGridTemplateColumn>
                        <dg:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Grid>
                                    <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"/>
                                </Grid>
                            </DataTemplate>
                        </dg:DataGridTemplateColumn.CellTemplate>
                    </dg:DataGridTemplateColumn>
                    <dg:DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="582">
                        <dg:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Margin="5" VerticalAlignment="Center" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=Default}" />
                            </DataTemplate>
                        </dg:DataGridTemplateColumn.CellTemplate>
                    </dg:DataGridTemplateColumn>
                    <dg:DataGridTemplateColumn Header="Status" IsReadOnly="True" Width="150">
                        <dg:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Margin="5" VerticalAlignment="Center" Text="{Binding Status, Mode=TwoWay, UpdateSourceTrigger=Default}" />
                            </DataTemplate>
                        </dg:DataGridTemplateColumn.CellTemplate>
                    </dg:DataGridTemplateColumn>
                    <dg:DataGridCheckBoxColumn Binding="{Binding IsSelected}"/>
                </dg:DataGrid.Columns>
                <dg:DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <dg:DataGrid x:Name="scondaryDatagrid" Margin="29,0,0,0" 
                            AutoGenerateColumns="False" 
                            CanUserAddRows="False"
                            AreRowDetailsFrozen="True"
                            CanUserReorderColumns="False"
                            CanUserResizeColumns="True"
                            CanUserResizeRows="False"
                            SelectionUnit="Cell"
                            RowDetailsVisibilityMode="VisibleWhenSelected"
                            ItemsSource="{Binding Grades, Mode=TwoWay}">
                            <dg:DataGrid.Columns>
                                <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True">
                                    <dg:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button Content="+" Width="28" Height="28" />
                                        </DataTemplate>
                                    </dg:DataGridTemplateColumn.CellTemplate>
                                </dg:DataGridTemplateColumn>
                                <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True">
                                    <dg:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" HorizontalContentAlignment="Center" />
                                        </DataTemplate>
                                    </dg:DataGridTemplateColumn.CellTemplate>
                                </dg:DataGridTemplateColumn>
                                <dg:DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="550">
                                    <dg:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Margin="5" Text="{Binding Name, Mode=TwoWay}" VerticalAlignment="Center" />
                                        </DataTemplate>
                                    </dg:DataGridTemplateColumn.CellTemplate>
                                </dg:DataGridTemplateColumn>
                            </dg:DataGrid.Columns>
                            <dg:DataGrid.RowDetailsTemplate>
                                <DataTemplate>
                                    <dg:DataGrid Margin="25,0,0,0" 
                                        AutoGenerateColumns="False" 
                                        CanUserAddRows="False"
                                        AreRowDetailsFrozen="True"
                                        CanUserReorderColumns="False"
                                        CanUserResizeColumns="True"
                                        CanUserResizeRows="False"
                                        SelectionUnit="Cell"
                                        ItemsSource="{Binding Notes, Mode=TwoWay}">
                                        <dg:DataGrid.Columns>
                                            <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True">
                                                <dg:DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                                    </DataTemplate>
                                                </dg:DataGridTemplateColumn.CellTemplate>
                                            </dg:DataGridTemplateColumn>
                                            <dg:DataGridTemplateColumn Header="Note" IsReadOnly="True" Width="550">
                                                <dg:DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBlock Margin="5" Text="{Binding Note, Mode=TwoWay}" VerticalAlignment="Center" />
                                                    </DataTemplate>
                                                </dg:DataGridTemplateColumn.CellTemplate>
                                            </dg:DataGridTemplateColumn>
                                        </dg:DataGrid.Columns>
                                    </dg:DataGrid>
                                </DataTemplate>
                            </dg:DataGrid.RowDetailsTemplate>
                        </dg:DataGrid>
                    </DataTemplate>
                </dg:DataGrid.RowDetailsTemplate>


            </dg:DataGrid>

Из-за свойства RowDetailsVisibilityMode, когда оно установлено в VisibleWhenSelected, Node DataGridDetailsPresenter для строк имеет 0 дочерних элементов. Когда для свойства установлено значение Visible, я вижу дочерние элементы DataGridDetailsPresenter.

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

Любой вклад приветствуется.

1 Ответ

1 голос
/ 08 сентября 2011

Чего ты пытаешься достичь?

Если RowDetails не видны, они не будут отображаться в дереве визуалов, если не вызовут принудительное их создание, установив для RowDetailsVisibilityMode значение Visible, но установив видимость RowDetails DataGrid в Collapsed.Это может не сработать.Я не знаю, будет ли DataGrid в дереве визуалов, если в 3.5 он будет свернут.

...