根据某列中的值应用行背景(WPF DataGrid)

  • 本文关键字:背景 WPF DataGrid 应用 c# wpf xaml
  • 更新时间 :
  • 英文 :


我为数据库制作了一个工具,用于显示具有特定筛选选项的项目。然而,在阅读了更多关于WPF和C#的内容之后。我用过这个https://www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings修改我的应用程序以处理ItemCollectionViewSource的教程

我正在尝试将某些背景应用于不同的行。我创建了类:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace Liinos_inspector_FilterTest
{
class LiinosIDToBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
{
string LiinosID = "";
if (LiinosID.Trim().StartsWith("7")) return Brushes.Blue;
if (LiinosID.Trim().StartsWith("6")) return Brushes.Yellow;
}
return Brushes.Red;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

这是XAML部分:

<DataGrid Margin="0,146,0,0" Background="{x:Null}" BorderBrush="{x:Null}"
CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" IsReadOnly="True" 
HorizontalGridLinesBrush="#FF377A6C" VerticalGridLinesBrush="#FF377A6C" 
DataContext="{StaticResource ItemCollectionViewSource}"
ItemsSource="{Binding}"
AutoGenerateColumns="False" FontFamily="Arial Nova" Foreground="White" >
<!--RowBackground="Transparent"-->
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" >
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Item.YRNRO, Converter={StaticResource LiinosIDToBackgroundConverter}}" />
</Style>
</DataGrid.RowStyle>

以下是列的XAML:

<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding YRNRO}">
<DataGridTextColumn.Header>
<TextBlock Text="LIINOS ID" FontWeight="Bold" TextAlignment="Left"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding HAKUNIMI}">
<DataGridTextColumn.Header>
<TextBlock Text="SEARCH NAME" FontWeight="Bold" TextAlignment="Left"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>

目前所有的行都是红色的,因为看起来这不是真的if (value is string)。有人对如何解决这个问题有什么建议吗?

问题或其中之一是绑定。当你这样做:

Value="{Binding RelativeSource={RelativeSource Self}, Path=Item.YRNRO,

它正在DataGridRow上查找一个具有属性YRNRO的属性Item。

您更有可能希望绑定到datagridow的datacontext,这意味着您应该删除relativesource绑定。

您有一个集合,它就是collectionviewsource。数据网格中的每一行都获得一个作为数据上下文的东西。

取决于你应该使用什么:

<Setter Property="Background" Value="{Binding YRNRO, Converter={StaticResource LiinosIDToBackgroundConverter}}" />

或者,如果某个东西有一个名为Item的属性,它是一个具有属性YNRNO的复杂对象,那么

<Setter Property="Background" Value="{Binding Item.YRNRO, Converter={StaticResource LiinosIDToBackgroundConverter}}" />

最新更新