c# - 如何使用 MVVM、C# 和无代码隐藏将 Row 的文本动态设置为粗体?

标签 c# wpf mvvm datagrid

我正在使用 .NET、MVVM、无代码隐藏、使用 PropertyChanged 开发 WPF 页面。在此页面中,我有一个包含很多列的 DataGrid。 在数据库中,其中一个列(我们称它为 HIGHLIGHT)将具有值 S 或 N。如果值 = S,则整行将为粗体或超粗体。案例 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}"/>

我需要什么:

我的数据库的每个表都有几个列,超过 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 或类似的东西。

关于c# - 如何使用 MVVM、C# 和无代码隐藏将 Row 的文本动态设置为粗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791900/

相关文章:

c# - 我应该为每个模型都有一个封装的 ViewModel 吗?

WPF 多线程 : Using Dispatcher but the UI still hangs?

c# - 如何从字符串返回枚举值?

WPF 调度程序未释放 GC 对象

c# - WPF : Re-usable template for image buttons?

c# - 如何从代码隐藏文件中的合并 ResourceDictionary 获取资源?

wpf - 在单独的线程WPF上更新两个单独的UI

c# - 管理图像?

c# - EF Core 使用 NUGET 包管理器控制台或 CMD

c# - 如何更新模型状态?