Как использовать WPF Toolkit Datagrid DataGridTemplateColumn и комбинированный список? - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть сетка данных, которая выглядит следующим образом

<tk:DataGrid  ItemsSource="{Binding Parents}" AutoGenerateColumns="False">
                <tk:DataGrid.Columns>
                <tk:DataGridTextColumn  Header="Description" Binding="{Binding ID}" />

                <tk:DataGridTemplateColumn Header="Description" >
                    <tk:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=Description, Mode=TwoWay}" />
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellEditingTemplate>
                    <tk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Description}"/>
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellTemplate>
                </tk:DataGridTemplateColumn>

                <tk:DataGridTemplateColumn Header="Child Description" >
                    <tk:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox  SelectedIndex="{Binding Path=ChildID}"  ItemsSource="{Binding Path=Children}" />
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellEditingTemplate>
                    <tk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Children.Description}"/>
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellTemplate>
                </tk:DataGridTemplateColumn>
            </tk:DataGrid.Columns>
        </tk:DataGrid>

Представление привязано к ViewModel, который предоставляет список родителей, который должен быть моими строками, и список детей, который должен быть выпадающим списком. Как это настроено, я получаю строки с родителями, но нет данных в столбце «Дочернее описание». Когда я дважды щелкаю, строка становится редактируемой, и появляется всплывающее окно. Но нет данных. Когда я смотрю в окно вывода, я вижу ошибку привязки, говоря: «Ошибка пути BindingExpression: свойство« Children »не найдено в объекте» Parent ». Я знаю ... Как мне сказать, чтобы посмотреть на один уровень вверх? Я пытался привязать сетку данных только к модели представления, но затем строки не отображаются. Я пытался использовать разметку родственников, но до сих пор не могу увидеть, что я хочу. Я уверен, что мой синтаксис неверен. И я не смог найти никаких примеров. Что я делаю не так?

1 Ответ

1 голос
/ 23 ноября 2009

Возможно, есть более разумные способы выполнения этой задачи, но глупый, быстрый метод, который я бы использовал, - это изменить объект Parent, чтобы он содержал коллекцию Children. Это сделает отношения Parent и Child явными, и вам не нужно менять синтаксис xaml сверху.

Если вы не хотите добавлять коллекцию Children в родительский объект, вы можете использовать следующую привязку xaml ::

    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type tk:DataGrid}}, 
Path=DataContext.Children}"
...