我有一个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等于“Incomplete”,那么我希望单元格中的文本变为红色。
从视图中可以看到的测试(实体)列表是SelectedTechnician.Tests和SelectedTechnician是我的ViewModel上的属性(DisplayTestsViewModel。
我想我必须使用GridViewColumn上的CellTemplate属性,但对如何有条件地操作模板(一般情况下)知之甚少,我不知道从哪里开始。
即使CellTemplate与它无关,我如何能够根据上述类似的条件分别设置GridViewColumn单元格的文本以改变颜色?
答案 0 :(得分:4)
你是正确的,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();
}
}