有条件地设置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的单元格的文本根据类似于上面描述的条件改变颜色?
你是正确的,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();
}
}