绑定到WPF DataGrid中的简单属性

本文关键字:简单 属性 DataGrid WPF 绑定 | 更新日期: 2023-09-27 18:09:58

我有一个问题绑定到我的模型上的属性。在DataGrid中,我显示错误。每个错误都有属性ErrorDescription,它本身也有属性Severity

我可以绑定到Severity在我的DataGrid的TextColumn下面,但是绑定到Severity在templateccolumn失败与错误

"在类型的数据上下文中无法解析属性"ErrorDescription"MainViewModel "

数据文本我的图像列与我的第一个文本列不一样。为什么呢?

  <DataGrid ItemsSource ="{Binding Errors}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            // works
            <DataGridTextColumn Binding="{Binding ErrorDescription.Severity}"></DataGridTextColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image>
                            <Image.Style>
                                <Style TargetType="Image">
                                    <Style.Triggers>
                                       // Binding fails
                                        <DataTrigger Binding="{Binding ErrorDescription.Severity}" Value="Unknown">
                                            <Setter Property="Source" Value="/error.jpg"/>
                                        </DataTrigger>
                                        // Binding fails
                                        <DataTrigger Binding="{Binding ErrorDescription.Severity}" Value="Ok">
                                            <Setter Property="Source" Value="/ok.jpg"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Image.Style>
                        </Image>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
      </DataGrid>

绑定到WPF DataGrid中的简单属性

如何使用转换器而不是DataTrigger?当我想要根据枚举显示图标或特定属性值时,我使用Converter来完成。

转换器类似于:

public class ErrorSeverityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Severity severity = (Severity)value;
        switch(severity)
        {
            case Severity.Unknown:
                return "/error.jpg";
            case Severity.Ok:
                return "/ok.jpg";
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

还有另一个非常相似的问题,即使不是在datagridtemplatecoluml

根据enum值启用TextBox