首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用数据绑定基于属性值设置DataGrid的行背景

如何使用数据绑定基于属性值设置DataGrid的行背景
EN

Stack Overflow用户
提问于 2013-08-05 16:00:47
回答 2查看 114.3K关注 0票数 88

在我的XAML代码中,我希望根据特定行中对象的值来设置每行的Background颜色。我有一个zObservableCollection,每个z都有一个名为State的属性。我一开始在我的DataGrid中有类似这样的东西

代码语言:javascript
复制
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Background" 
                Value="{Binding z.StateId, Converter={StaticResource StateIdToColorConverter}}"/>
     </Style>
</DataGrid.RowStyle>

这是一个错误的方法,因为x不是我的ViewModel类中的一个属性。

在我的ViewModel类中,我有一个ObservableCollection<z>,它是这个DataGridItemsSource,还有一个z类型的SelectedItem

我可以将颜色绑定到SelectedItem,但这只会更改DataGrid中的一行。

如何根据一个属性更改此行的背景颜色?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-05 16:12:14

使用DataTrigger

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding YourItemsSource}">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow"> 
            <Style.Triggers>
                <DataTrigger Binding="{Binding State}" Value="State1">
                    <Setter Property="Background" Value="Red"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding State}" Value="State2">
                    <Setter Property="Background" Value="Green"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>
票数 184
EN

Stack Overflow用户

发布于 2015-12-14 15:58:13

没有DataTrigger也可以做到这一点:

代码语言:javascript
复制
 <DataGrid.RowStyle>
     <Style TargetType="DataGridRow">
         <Setter Property="Background" >
             <Setter.Value>
                 <Binding Path="State" Converter="{StaticResource BooleanToBrushConverter}">
                     <Binding.ConverterParameter>
                         <x:Array Type="SolidColorBrush">
                             <SolidColorBrush Color="{StaticResource RedColor}"/>
                             <SolidColorBrush Color="{StaticResource TransparentColor}"/>
                         </x:Array>
                     </Binding.ConverterParameter>
                 </Binding>
             </Setter.Value>
         </Setter>
     </Style>
 </DataGrid.RowStyle>

其中BooleanToBrushConverter是以下类:

代码语言:javascript
复制
public class BooleanToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return Brushes.Transparent;

        Brush[] brushes = parameter as Brush[];
        if (brushes == null)
            return Brushes.Transparent;

        bool isTrue;
        bool.TryParse(value.ToString(), out isTrue);

        if (isTrue)
        {
            var brush =  (SolidColorBrush)brushes[0];
            return brush ?? Brushes.Transparent;
        }
        else
        {
            var brush = (SolidColorBrush)brushes[1];
            return brush ?? Brushes.Transparent;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18053281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档