Wpf 在datagrid中使用带映像的转换器

Wpf 在datagrid中使用带映像的转换器,wpf,image,datagrid,visibility,converter,Wpf,Image,Datagrid,Visibility,Converter,我在数据转换器方面遇到了一些问题,尤其是关于多行和动态显示/隐藏图像的问题 让我们从主/详细数据的角度来看问题。在一个给定的视图(演示文稿)上,我有标题信息和一个显示一系列行项目的数据网格。在保存行项目之前,可能有一行或多行数据丢失/无效。我想在行项目的左侧显示一个图形图像,给用户一些视觉提示…嘿,这一行需要修复 因此,我的ViewModel上有一个datatable,它有一个额外的列,指示行是否存在与布尔值相关的错误,因为datatable列类型不知道如何处理wpf“可见性”数据类型。此dat

我在数据转换器方面遇到了一些问题,尤其是关于多行和动态显示/隐藏图像的问题

让我们从主/详细数据的角度来看问题。在一个给定的视图(演示文稿)上,我有标题信息和一个显示一系列行项目的数据网格。在保存行项目之前,可能有一行或多行数据丢失/无效。我想在行项目的左侧显示一个图形图像,给用户一些视觉提示…嘿,这一行需要修复

因此,我的ViewModel上有一个datatable,它有一个额外的列,指示行是否存在与布尔值相关的错误,因为datatable列类型不知道如何处理wpf“可见性”数据类型。此datatable.DefaultView是显示数据的实际基础(有效)。我只是停留在这个最终的图像动态显示/隐藏正确

我读过关于转换器的书,有一个类只做转换器。因此,我只能对那些能够提供帮助的人提出以下建议

我的ViewModel具有公开DefaultView的属性

public DataView MyDetailView
{ get { return MyTable.DefaultView; }}
为简单起见,此表有两列

RecordIsInvalid (boolean), 
LineItem (int)

使用BooleantVisibilityConverter绑定应该非常简单:


但据我所知,您有一个单一的
RecordIsInvalid
标志和
LineNumber
,它们指向特定的行。每行实际绑定了什么?您是否有类似于每行对应的ItemViewModel的内容?基本上,每个项目都应该负责验证其自身的状态,并公开
IsValid
属性,这样一来,事情会变得非常干净和简单,所以您可以简单地绑定到每个网格视图项目范围内的
IsValid

编辑:回复评论

您不应该自己实例化和公开转换器

  • 将转换器类放入适当的命名空间中,如
    MyProject.GUI.Converters
  • 在View.xaml中,为Converters添加命名空间别名,请参见*1
  • 将转换器添加到XAML中的控件/窗口资源中,请参见*2
*1:MyView.xaml

<UserControl ...
       xmlns:Converters="clr-namespace:MyProject.GUI.Converters" />
<UserControl.Resources>
    <Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>

*2:MyView.xaml

<UserControl ...
       xmlns:Converters="clr-namespace:MyProject.GUI.Converters" />
<UserControl.Resources>
    <Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>


它不由单独的视图模型处理。它只是一个在主视图模型上公开的数据视图。至于转换器,我目前将其作为一个单独的类,不在视图模型中。使转换器可用的最佳方法是什么。。。作为类的实例化实例,并将其作为视图DataContext的属性公开以允许其公开?我还在学习一些复杂的XAML与ViewModel、静态引用等绑定引用。。。成功了。我最初并不理解上下文,但您对单个元素的清晰示例(与许多超级嵌套的元素相反)让我直截了当。。。谢谢