DataGrid с привязанным к массиву шаблоном ячейки показывает только данные из первого столбца? - PullRequest
0 голосов
/ 17 апреля 2019

У меня проблемы с получением шаблона ячейки для работы с DatagridTemplateColumn.Отображаемый вывод показывает все столбцы, заполненные данными из первого столбца для каждой строки.

Если я установлю привязку текста ячейки к {Binding [2] .Text}, во всех столбцах будут показаны данные для 3-го столбца, поэтому я думаю, что мне нужен какой-то способ в шаблоне ячейки, чтобы получить индекс,Я попытался установить привязку к {Binding [{DisplayIndex}]. Text}, но затем я получаю «Ошибка пути BindingExpression: свойство [[] 'не найдено в« объекте »»

PS: у меня естьиспользовать DataGridTemplateColumn, потому что в будущем я буду делать более сложные отображения.

Вот соответствующий xaml:

            <DataGrid ItemsSource="{Binding TableItems}" AutoGenerateColumns="False" >
                <DataGrid.Resources>
                    <DataTemplate x:Key="MyCellTemplate" >
                        <TextBlock Text="{Binding Text}" />
                    </DataTemplate>
                </DataGrid.Resources>
                <DataGrid.Columns>
                    <DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col1" />
                    <DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col2" />
                    <DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}" Header="Col3" />
                </DataGrid.Columns>
            </DataGrid>

Данные привязки:

        public ObservableCollection<string[]> TableItems { get; set; } 
        ...
        TableItems.Add(new string[]{"A","B","C"};
        TableItems.Add(new string[]{"D","E","F"};
        TableItems.Add(new string[]{"G","H","I"};

КогдаЯ запускаю свою программу, данные для всех столбцов такие же, как первый столбец в каждой строке.Например:

Начальные данные:

A,B,C
D,E,F
G,H,I

Результирующий вывод:

A,A,A
D,D,D
G,G,G

Ожидаемый результат:

A,B,C
D,E,F
G,H,I

РЕДАКТИРОВАТЬ: -----------------------------------

Немного больше информации: этот xaml работает, но, очевидно, я бынравится использовать общий шаблон ячейки.

                 <DataGrid.Columns>
                    <DataGridTemplateColumn Header="col1" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [0].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
                    <DataGridTemplateColumn Header="col2" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [1].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
                    <DataGridTemplateColumn Header="col3" > <DataGridTemplateColumn.CellTemplate> <DataTemplate><TextBlock Text="{Binding [2].Text}" /></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
                </DataGrid.Columns>

1 Ответ

0 голосов
/ 18 апреля 2019

Этот xaml работает, но, очевидно, я хотел бы использовать общий шаблон ячейки.

Вы не можете, так как пути привязки между столбцами различаются.В XAML нет поддержки для выполнения чего-то вроде {Binding [{DisplayIndex}].Text}.

Что вы можете сделать, это программно создать три шаблона, используя метод XamlReader.Parse: Объединение шаблонов данных во время выполнения

...