我正在构建一个DataGrid,在该中,我希望根据当前项的底层数据类型在单元格内切换图像。
问:是否可以应用这种类型的模板切换?最好只在xaml?
ItemsSource是
ObservableCollection<BaseModel>包含类型项的
IncidentModel : BaseModel
ServiceModel : BaseModel这就是我目前所处的地方:
<DataGrid
ItemsSource="{Binding TicketCollection,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}"
IsReadOnly="True"
AutoGenerateColumns="False"
DockPanel.Dock="Top">
<DataGrid.Resources>
<DataTemplate DataType="{x:Type models:IncidentModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/Active_16.png" />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ServiceModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/IncidentMgmt_AllIncidents_16.png" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Typ">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Id" Binding="{Binding Id,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}" />
<DataGridTextColumn Header="Titel" Binding="{Binding Title,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}" />
<DataGridTextColumn Header="Status" Binding="{Binding Status,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}" />
<DataGridTextColumn Header="Erstellung" Binding="{Binding CreatedDate,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}" />
</DataGrid.Columns>
</DataGrid>感谢所有可能的帮助!
发布于 2017-04-06 08:56:47
你可以用DataTemplateSelector
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate IncidentTemplate { get; set; }
public DataTemplate ServiceTemplate { get; set; }
public override DataTemplate SelectTemplate
(object item, DependencyObject container)
{
if (item is IncidentModel) return IncidentTemplate;
else if (item is ServiceModel) return ServiceTemplate;
else return base.SelectTemplate(item, container);
}
}XAML
<DataGrid
...
>
<DataGrid.Resources>
<DataTemplate x:Key="IncidentTemplate" DataType="{x:Type models:IncidentModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/Active_16.png" />
</DataTemplate>
<DataTemplate x:Key="ServiceTemplate" DataType="{x:Type models:ServiceModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/IncidentMgmt_AllIncidents_16.png" />
</DataTemplate>
<local:MyTemplateSelector x:Key="MyTemplateSelector"
IncidentTemplate="{StaticResource IncidentTemplate}"
ServiceTemplate="{StaticResource ServiceTemplate}" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Typ"
CellTemplateSelector="{StaticResource MyTemplateSelector}" />
...
</DataGrid.Columns>
</DataGrid>发布于 2017-11-13 12:51:28
用一个额外的ContentPresenter在XAML中完成这一切似乎是可行的:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Typ">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type models:IncidentModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/Active_16.png" />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ServiceModel}">
<Image Source="pack://application:,,,/SMLib;component/Files/Images/16x16/IncidentMgmt_AllIncidents_16.png" />
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>https://stackoverflow.com/questions/43248202
复制相似问题