我为数据库制作了一个工具,用于显示具有特定筛选选项的项目。然而,在阅读了更多关于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}}" />