Wpf 在datagrid中使用带映像的转换器
我在数据转换器方面遇到了一些问题,尤其是关于多行和动态显示/隐藏图像的问题 让我们从主/详细数据的角度来看问题。在一个给定的视图(演示文稿)上,我有标题信息和一个显示一系列行项目的数据网格。在保存行项目之前,可能有一行或多行数据丢失/无效。我想在行项目的左侧显示一个图形图像,给用户一些视觉提示…嘿,这一行需要修复 因此,我的ViewModel上有一个datatable,它有一个额外的列,指示行是否存在与布尔值相关的错误,因为datatable列类型不知道如何处理wpf“可见性”数据类型。此datatable.DefaultView是显示数据的实际基础(有效)。我只是停留在这个最终的图像动态显示/隐藏正确 我读过关于转换器的书,有一个类只做转换器。因此,我只能对那些能够提供帮助的人提出以下建议 我的ViewModel具有公开DefaultView的属性Wpf 在datagrid中使用带映像的转换器,wpf,image,datagrid,visibility,converter,Wpf,Image,Datagrid,Visibility,Converter,我在数据转换器方面遇到了一些问题,尤其是关于多行和动态显示/隐藏图像的问题 让我们从主/详细数据的角度来看问题。在一个给定的视图(演示文稿)上,我有标题信息和一个显示一系列行项目的数据网格。在保存行项目之前,可能有一行或多行数据丢失/无效。我想在行项目的左侧显示一个图形图像,给用户一些视觉提示…嘿,这一行需要修复 因此,我的ViewModel上有一个datatable,它有一个额外的列,指示行是否存在与布尔值相关的错误,因为datatable列类型不知道如何处理wpf“可见性”数据类型。此dat
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
<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、静态引用等绑定引用。。。成功了。我最初并不理解上下文,但您对单个元素的清晰示例(与许多超级嵌套的元素相反)让我直截了当。。。谢谢