c# - 有条件地设置 GridViewColumn 单元格模板

标签 c# wpf mvvm

我有一个 View DisplayTestsView.cs,在那个 View 中我有

<ListView ItemsSource="{Binding SelectedTechnician.Tests}"
SelectedItem="{Binding SelectedTest}" x:Name="AvailableTestsListView" Height="140">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Id" Width="auto" DisplayMemberBinding="{Binding Id}"/>
            <GridViewColumn Header="Test" Width="auto" DisplayMemberBinding="{Binding TestTypeName}"/>
            <GridViewColumn Header="Status" Width="auto" DisplayMemberBinding="{Binding StutusTypeName}"/>
        </GridView>
    </ListView.View>
</ListView>

我希望 StatusTypeName 单元格文本的 TextColor 是基于条件的特定颜色。例如,如果 StatusTypeName 等于“Incomplete”,那么我希望单元格中的文本变为红色。

从 View 中可以看到的测试(实体)列表是 SelectedTechnician.Tests,而 SelectedTechnician 是我的 ViewModel (DisplayTestsViewModel) 上的一个属性。

我想人们必须使用 GridViewColumn 上的 CellTemplate 属性,但对如何有条件地操作模板(通常)知之甚少,我不确定从哪里开始。

即使 CellTemplate 与它无关,我如何根据与上述类似的条件有条件地设置 GridViewColumn 单元格的文本以更改颜色?

最佳答案

您是正确的,CellTemplate 是实现颜色更改的正确位置。

你可以这样做(警告 - 未经测试):

<ListView ItemsSource="{Binding SelectedTechnician.Tests}"
SelectedItem="{Binding SelectedTest}" x:Name="AvailableTestsListView" Height="140">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Id" Width="auto" DisplayMemberBinding="{Binding Id}"/>
            <GridViewColumn Header="Test" Width="auto" DisplayMemberBinding="{Binding TestTypeName}"/>
            <GridViewColumn Header="Status" Width="auto">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock
                            Text="{Binding StatusTypeName}"
                            Foreground="{Binding StatusTypeName, Converter={StaticResource StatusTypeNameToBrushConverter}}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
        </GridView>
    </ListView.View>
</ListView>

StatusTypeNameToBrushConverter 会是这样的:

public class StatusTypeNameToBrushConverter : IValueConverter
{
    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        var statusTypeName = (string)value;
        switch (statusTypeName)
        {
            case "Incomplete":
                return Brushes.Red;
            default:
                return Brushes.Black;
        }
    }

    public object ConvertBack(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

关于c# - 有条件地设置 GridViewColumn 单元格模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350508/

相关文章:

c# - 使 Entity Framework 将存储过程结果集列解释为 bool 而不是 int?

c# - 读取 XML 的第一行

WPF : Get index of clicked/selected cell on DataGrid

android-studio - 无法访问类 'viewModel' 。检查您的模块类路径是否存在缺失或冲突的依赖项

c# - 悬停效果对WPF TreeView的子元素有错误

c# - 将字节数组复制到 C# 中类/结构中的各个字段

wpf - 如何使 WPF 按钮看起来像一个链接?

c# - 在 DataTemplate 上找不到 TargetType 属性

windows-phone-7 - Windows Phone 7中的样式触发器

c# - 检测第一个或第二个鼠标按钮释放?