Единственный способ, с которым я до сих пор сталкивался, - это использование CellTemplateSelector
свойства GridViewColumn
.Вам нужно будет ввести DataTemplateSelector
, чтобы выбрать правильный DataTemplate
.Это немного чище в том смысле, что вы по-прежнему определяете макет / содержимое дисплея в xaml и просто выбираете соответствующий шаблон.
Редактировать : Да, вы не можете использовать DisplayMemberBinding
в этом случае, однако, DisplayMemberBinding
- это простой ярлык для шаблона данных TextBlock
, привязанного к пути.Однако, когда вы используете табличку с данными, вы можете выполнить там все необходимые привязки - в этом случае вам не понадобится DisplayMemberBinding
.
Быстрый пример:
<Grid>
<Grid.Resources>
<r:NameCellTemplateSelector x:Key="NameTemplateSelector"/>
<r:StatusCellTemplateSelector x:Key="StatusTemplateSelector"/>
<Grid.Resources>
...
<GridViewColumn Header="Name" CellTemplateSelector={StaticResource NameTemplateSelector} />
<GridViewColumn Header="Status" CellTemplateSelector={StaticResource StatusTemplateSelector} />
</Grid>
И иреализовать селекторы:
public class NameCellTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
// find the data template with a specific x:Key
return element.FindResource("someNameTemplate") as DataTemplate;
}
}
public class StatusCellTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
// find the data template with a specific x:Key
return element.FindResource("someStatusCellTemplate") as DataTemplate;
}
}
Возможно, вам также может потребоваться просто написать один селектор, поскольку параметр container
является элементом пользовательского интерфейса, и вы можете пройтись по визуальному дереву, чтобы выяснить, к какому столбцу относится селектор.быть призванным и выбирать соответствующим образом исходя из этого.См. Также ответы на этот вопрос: Передача данных в селектор шаблонов данных