3

ビュー 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 セル テキストの TextColor を、条件に基づいて特定の色にしたい。たとえば、StatusTypeName が "Incomplete" の場合、セル内のテキストを赤くしたいと思います。

ビューから確認できるテスト (エンティティ) のリストは SelectedTechnician.Tests であり、SelectedTechnician は ViewModel (DisplayTestsViewModel.

GridViewColumn の CellTemplate プロパティを操作する必要があると思いますが、(一般的に) テンプレートを条件付きで操作する方法についての洞察がほとんどないため、どこから始めればよいかわかりません。

CellTemplate はそれとは何の関係もありませんが、GridViewColumn のセルのテキストを条件に基づいて条件に基づいて色を変更するように条件付きで設定するにはどうすればよいですか?

4

1 に答える 1

5

色の変更を実装するには、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();
    }
}
于 2013-03-11T23:37:24.560 に答える