我对这些数据转换器的东西感到磕磕绊绊,特别是与多行相关并动态显示/隐藏图像。
让我们从主/详细数据的角度来看。在给定的视图(演示文稿)上,我有标题信息和显示一堆订单项的数据网格。在保存订单项之前,可能会有一行或多行丢失/无效数据。我想在订单项的左侧显示一个图形图片,为用户提供一些视觉提示......嘿,这一行需要修复......
所以,我的ViewModel上有一个数据表,它有一个额外的列,指示是否存在与该行关联的错误,因为数据表列类型不知道如何处理wpf“visibility”数据类型。这个datatable.DefaultView是显示数据的实际基础(有效)。我只是坚持最后让图像动态显示/隐藏。
我已经阅读了有关转换器的内容,并且有一个类只能充当转换器。所以,我只能为那些可以提供帮助的人建议以下内容。
我的ViewModel有一个公开DefaultView
的属性public DataView MyDetailView
{ get { return MyTable.DefaultView; }}
为简单起见,此表有两列..
RecordIsInvalid (boolean),
LineItem (int)
答案 0 :(得分:1)
使用BooleanToVisibilityConverter绑定应该非常简单:
<Image Visibility="{Binding RecordIsInvalid,
Converter={StaticResource BooleanToVisibilityConverter}}" ... />
但据我所知,你有一个RecordIsInvalid
标志和LineNumber
,它引用一个特定的行。什么实际上绑定到每一行?你有像ItemViewModel那样对应每一行吗?基本上每个Item应该负责验证它自己的状态并以这种方式公开IsValid
属性,因为事情会非常干净和简单,所以你可以简单地绑定到每个网格视图范围内的IsValid
编辑:回复评论
您不应该自己实例化和公开转换器。
MyProject.GUI.Converters
* 1: MyView.xaml
<UserControl ...
xmlns:Converters="clr-namespace:MyProject.GUI.Converters" />
* 2: MyView.xaml
<UserControl.Resources>
<Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>