Silverlight DataGrid造型

时间:2009-02-12 21:53:34

标签: c# silverlight coding-style

我有一个DataGrid,其ItemsSource绑定到一个不断变化的Observable Collection。这个集合的内部是一个业务对象。根据业务对象属性的某些值,我希望能够在创建ItemsSource后修改DataGrid中显示的每个项目的文本颜色。

之前是否有人这样做过或遇到类似的事情?提前谢谢。

<DataTemplate x:Key="MyTemplate">
        <Grid x:Name="LayoutRoot">
            <TextBlock Text="{Binding MyText}" 
                       Foreground="{Binding MyStatus, Converter={StaticResource colorConverter}}" />
        </Grid>
    </DataTemplate>

我添加了上面的代码并将TemplateColumn插入到网格中,如下所示:

<data:DataGridTemplateColumn Header="Testing"
                                                 CellTemplate="{StaticResource MyTemplate}"/>

代码工作正常并提取正确的文本,但转换器永远不会触发,前景的绑定永远不会从上面调用。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

是。在数据绑定时使用Value Converter

<UserControl.Resources>
    <myconverters:BackColor x:Key="BackColor" />
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="{Binding SomeValue, Converter={StaticResource BackColor}" >
</Grid>

然后让你的转换器类实现IValueConverter并返回某种类型的Brush对象。您通常不必实现ConvertBack()

答案 1 :(得分:0)

添加到BC的答案:

您可以创建DataGridTemplateColumn并为列中的单元格指定数据模板。在数据模板中,您可以绑定文本颜色。

<swcd:DataGrid ... >
    <swcd:DataGrid.Columns>
        <swcd:DataGridTemplateColumn Header="MyColumn" CellTemplate="{StaticResource MyColumnDataGridCellTemplate}"/>
         ...
资源中的

<DataTemplate x:Key="MyColumnDataGridCellTemplate">
    <Grid>
         <TextBlock Text="{Binding someproperty}" Foreground="{Binding someotherproperty, Converter={StaticResource MyConverter}}"/>
          ...