如何动态设置Row';s文本为粗体,使用MVVM、C#且无代码隐藏
本文关键字:使用 MVVM 隐藏 代码 文本 动态 何动态 设置 Row | 更新日期: 2023-09-27 18:19:46
我正在使用.NET、MVVM、无代码隐藏、使用PropertyChanged开发一个WPF页面。在这个页面中,我有一个包含许多列的DataGrid。在DB中,其中一列(我们称之为HIGHLIGHT)将具有值s或N。如果值=s,则整行将为粗体或ExtraBold。情况N=正常。
我在XAML中使用以下代码完成了这项工作:
<Style x:Key="TextRowStyle" TargetType="{x:Type TextBlock}" >
<Style.Triggers>
<DataTrigger Binding="{Binding Slab.Highlight}" Value="S">
<Setter Property="FontWeight" Value="ExtraBold"/>
</DataTrigger>
</Style.Triggers>
</Style>
但这样做,我必须在每个列中放入这段代码才能使其工作(注意ElementStyle):
<DataGridTextColumn Header="Test" Binding="{Binding SlabSeq}" ElementStyle="{StaticResource TextRowStyle}"/>
我需要什么:
我的DB的每个表都有几个列,超过60、70,我正在寻找一种更容易的方法,比如我制作的StaticResource TextRowStyle。。。
我做的另一件事是一个转换器:
public class HighlightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToChar(value).Equals("S"))
return FontWeights.ExtraBold;
else
return FontWeights.Normal;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return FontWeights.ExtraBold;
}
}
我试着在这些字段中制作一个转换器,使用:
<Page.Resources>
<vm:HighlightConverter x:Key="HighlightConverter"/>
</Page.Resources>
并进入网格:
<TextBlock FontWeight={Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>
有人知道我该怎么做吗?
谨致问候,古斯塔沃。
为什么不在DataGrid.Resources中创建"本地"样式。整行必须是粗体(S)或普通(N),我说得对吗?
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}" >
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Slab.Highlight}" Value="S">
<Setter Property="FontWeight" Value="ExtraBold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
如果代码在上面,所有单元格都是正常的,但如果数据行有Slab.Highlight=S,则所有单元格都将是粗体。代码没有经过测试。也许你必须添加TextBlock.Fontweight或类似的东西。
通过删除x:Key
来隐式应用样式怎么样?这将使它在放置在DataGrid.Resources
中时适用于网格中的任何位置。
这可能会奏效。抱歉,它还没有经过测试,因为我离IDE很远。
<DataGrid>
<DataGrid.Resources>
<Style TargetType="DataGridTextColumn">
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="{Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>
</Style>
</Style.Resources>
</Style>
</DataGrid.Resources>
</DataGrid>