Как использовать WPF Toolkit Datagrid DataGridTemplateColumn и поле со списком?

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

<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: свойство« Дети »не найдено в« объекте »« Родитель ». Я знаю ... Как мне сказать, чтобы он смотрел на один уровень выше? Я пробовал привязать сетку данных только к модели представления, но строки не отображаются. Я пробовал использовать разметку родственников, но все еще не могу увидеть то, что я хочу. Я уверен, что мой синтаксис неверен. И я не смог найти никаких примеров. Что я делаю неправильно?


person nportelli    schedule 16.11.2009    source источник


Ответы (1)


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

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

    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type tk:DataGrid}}, 
Path=DataContext.Children}"
person Ed Gonzalez    schedule 23.11.2009
comment
Проблема в том, что я хочу, чтобы он зависел от значений строки. взгляните здесь: http://stackoverflow.com/questions/3203416/accessing-control-between-datagridcells-dynamic-cascading-comboboxes - person Shimmy Weitzhandler; 11.07.2010