Пользовательский столбец DataGrid с CellTemplate и привязкой - PullRequest
4 голосов
/ 17 августа 2010

Мне нужно создать многоразовый столбец DataGrid с настраиваемым шаблоном CellTemplate. Этот CellTemplate должен, среди прочего, содержать элемент управления TextBlock, с которым мне нужно связать значения для отображения в DataGrid. Все примеры, которые я до сих пор видел, указывали CellTemplate для столбца непосредственно при его использовании в свойстве Columns DataGrid, а также указывали привязку непосредственно к TextBlock, например ::

<data:DataGrid>
    <data:DataGrid.Columns>
        <data:DataGridTemplateColumn Header="Name">
            <data:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </data:DataGridTemplateColumn.CellTemplate>
        </data:DataGridTemplateColumn>
    </data:DataGrid.Columns>
</data:DataGrid>

Мне нужно заключить этот столбец в один многократно используемый элемент управления, и я хочу указать для него Binding, как и для обычного DataGridTextColumn. Другими словами, при использовании этого пользовательского столбца я просто хочу написать что-то вроде этого:

<data:DataGrid>
    <data:DataGrid.Columns>
        <controls:CustomColumn Header="Name" Binding="{Binding Name}" />
    </data:DataGrid.Columns>
</data:DataGrid>

Проблема в том, что DataGridTemplateColumn, от которого наследуется мой пользовательский столбец, не имеет свойства Binding. Я думал, что смогу использовать DataGridBoundColumn, но невозможно указать CellTemplate для него.

Как добиться желаемого поведения? Спасибо!

1 Ответ

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

Я думаю, что самое простое, что нужно сделать, это создать настраиваемый элемент управления, а затем использовать его так:

            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <controls:CustomColumn Header="Name" Binding="{Binding Name}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

Я сделал что-то подобное вчера, и это работает довольно хорошо

...