Указание контекста данных для DataGridTemplateColumn - PullRequest
0 голосов
/ 07 апреля 2020

DataGrid связан с List, где T имеет несколько вложенных свойств (среди прочих).

class T
{
    public X PropertyX {get;}
    public Y PropertyY {get;}
    public Z PropertyZ {get;}
}

class X { public A SomeProperty {get;}}
class Y { public A SomeProperty {get;}}
class Z { public A SomeProperty {get;}}

Классы X, Y и Z имеют одно и то же свойство SomeProperty типа A.

Мне нужно показать данные для SomeProperty PropertyX, PropertyY и PropertyZ соответственно.

Итак, мне нужно что-то вроде этого:

<DataGridTemplateColumn DataContext="{Binding X.A}" CellTemplate="{StaticResource CommonTemplate}" />
<DataGridTemplateColumn DataContext="{Binding Y.A}" CellTemplate="{StaticResource CommonTemplate}" />
<DataGridTemplateColumn DataContext="{Binding Z.A}" CellTemplate="{StaticResource CommonTemplate}" />

Очевидно, столбец DataGridTemplate не имеет DataContext, поэтому я интересно это можно сделать? CommonTemplate довольно большой, и я хотел бы использовать его повторно.

Есть идеи?

1 Ответ

1 голос
/ 07 апреля 2020

вы можете повторно использовать существующий DataTemplate в другом DataTemplate, который также указывает DataContext:

<DataGridTemplateColumn Header="x">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding PropertyX.SomeProperty}" 
                              ContentTemplate="{StaticResource CellTemplate}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

<DataGridTemplateColumn Header="y">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding PropertyY.SomeProperty}" 
                              ContentTemplate="{StaticResource CellTemplate}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...