在datagrid中使用Converter with image

时间:2011-11-08 13:04:39

标签: wpf image datagrid visibility converter

我对这些数据转换器的东西感到磕磕绊绊,特别是与多行相关并动态显示/隐藏图像。

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

所以,我的ViewModel上有一个数据表,它有一个额外的列,指示是否存在与该行关联的错误,因为数据表列类型不知道如何处理wpf“visibility”数据类型。这个datatable.DefaultView是显示数据的实际基础(有效)。我只是坚持最后让图像动态显示/隐藏。

我已经阅读了有关转换器的内容,并且有一个类只能充当转换器。所以,我只能为那些可以提供帮助的人建议以下内容。

我的ViewModel有一个公开DefaultView

的属性
public DataView MyDetailView
{ get { return MyTable.DefaultView; }}

为简单起见,此表有两列..

RecordIsInvalid (boolean), 
LineItem (int)

1 个答案:

答案 0 :(得分:1)

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

<Image Visibility="{Binding RecordIsInvalid, 
                    Converter={StaticResource BooleanToVisibilityConverter}}" ... />

但据我所知,你有一个RecordIsInvalid标志和LineNumber,它引用一个特定的行。什么实际上绑定到每一行?你有像ItemViewModel那样对应每一行吗?基本上每个Item应该负责验证它自己的状态并以这种方式公开IsValid属性,因为事情会非常干净和简单,所以你可以简单地绑定到每个网格视图范围内的IsValid

编辑:回复评论

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

  • 将转换器类放在一些适当的命名空间中,例如MyProject.GUI.Converters
  • 在View.xaml中为Converetrs添加命名空间别名,请参阅* 1
  • 将转换器添加到XAML中的Control / Window资源中,请参阅* 2

* 1: MyView.xaml

<UserControl ...
       xmlns:Converters="clr-namespace:MyProject.GUI.Converters" />

* 2: MyView.xaml

<UserControl.Resources>
    <Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>