【问题标题】:Silverlight DataGrid stylingSilverlight DataGrid 样式
【发布时间】:2009-02-12 21:53:34
【问题描述】:

我有一个 DataGrid,它的 ItemsSource 绑定到一个不断变化的 Observable 集合。这个集合的内部是一个业务对象。根据业务对象属性的一些值,我希望能够在创建 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}"/>

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

有什么想法吗?

【问题讨论】:

    标签: c# silverlight coding-style


    【解决方案1】:

    是的。数据绑定时使用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()

    【讨论】:

    • 我会将此标记为答案,但您回答的是网格而不是 DataGrid。我有我的转换器设置,所以我现在正在研究这种风格,并将提供解决方案。
    • 我的想法更像是 Grid 会存在于 ItemTemplate 中。
    【解决方案2】:

    添加到 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}}"/>
              ...
    

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 2011-04-18
      • 2011-03-10
      • 2010-09-27
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多