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

本文关键字:单元格 GridViewColumn 设置 有条件 | 更新日期: 2023-09-27 18:03:37

我有一个视图displaytestsview。cs在这个视图中我有

<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 Cell文本的TextColor是基于条件的特定颜色。例如,如果StatusTypeName等于"不完整",那么我希望单元格中的文本变成红色。

从视图中可以看到的测试(实体)列表是SelectedTechnician。test and SelectedTechnician是我的ViewModel (DisplayTestsViewModel)的一个属性。

我想象一个人必须与GridViewColumn上的CellTemplate属性一起工作,但在如何有条件地操作模板(一般情况下)方面几乎没有洞察力,我不确定从哪里开始。

即使CellTemplate与它无关,我怎么能有条件地设置GridViewColumn的单元格的文本根据类似于上面描述的条件改变颜色?

有条件地设置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();
    }
}