在运行时设置datagrid单元模板

时间:2013-11-28 08:14:03

标签: wpf datagrid datatemplate datagridcell

我写了一篇DataTemplate:

  <DataTemplate x:Key="ellipseTemplate">
            <Grid Margin="4">
                <Grid.ColumnDefinitions>                        
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Ellipse Height="20" Width="20" StrokeThickness="5" Stroke="Black"  Fill="Gold"/>

            </Grid>
  </DataTemplate>

我想在运行时将其设置为DateGridCell.Template属性。 我可以访问单元格并更改其属性。 我正在使用MVVM,所以我不想从代码隐藏中访问它 我可以从视图模型代码访问此模板并将其设置为单元格模板属性吗? 或者我可以在代码中使用viewmodel而不是XAML构建它?

1 个答案:

答案 0 :(得分:0)

您正在寻找的内容称为CellTemplateSelector。

看一下这个例子:

这应放在Window.Resources中。

<DataTemplate x:Key="DefaultTemplate">
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Name}" Value="Andre">
            <Setter Property="DataGrid.Foreground" Value="Yellow"></Setter>
        </DataTrigger>
    </DataTemplate.Triggers>

    <TextBlock>
        <TextBlock.Text>
            <Binding Path="Name"/>
        </TextBlock.Text>
    </TextBlock>

</DataTemplate>

这应该放在DataGridTemplateColumn定义中。任何DataGridColumn都允许设置CellTemplateSelector。

<DataGridTemplateColumn.CellTemplateSelector>
    <local:TemplateSelector 
     DefaultTemplate="{StaticResource DefaultTemplate}"                          
    </local:TemplateSelector>
<DataGridTemplateColumn.CellTemplateSelector>

在我给你的例子中,这个人有一个自定义的TemplateSelector,他在CellTemplateSelector中定义了这样的:<local:TemplateSelector...

要了解有关CellTemplateSelector或一般有关ContentTemplateSelectors的更多信息,我建议您查看以下链接:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtemplatecolumn.celltemplateselector%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.contenttemplateselector%28v=vs.110%29.aspx

最后一个链接有一个MSDN示例,您也应该查看。