CanYou1 发表于 2015-12-3 21:54:00

如何让DataGrid每一行根据其绑定的DataItem的一个属性值的变动而改变其显示或是隐藏的特性?

Alice,如题,如何让DataGrid每一行根据其绑定的DataItem的一个属性值的变动而改变其显示或是隐藏的特性?
比如有一个DataGrid列表,其ItemsSource绑定的是Student实体列表StudentList。
我想将DataGrid每一行的Visibility属性绑定到其对应的Student实体的IsDeleted属性,当IsDeleted为true时,这一行就隐藏(而不是删除)。
也就是说,假如StudentList有10条数据且IsDeleted属性都是false,我要达到的效果是,
当我将前3条数据的IsDeleted属性设为true时,StudentList还是10条数据不变,但是DataGrid的前3行被隐藏了。

请问如何实现这样的需求?

Alice 发表于 2015-12-4 10:42:00

回复 1楼CanYou1的帖子

谢谢您的反馈。
您的问题我收到了,测试后给您反馈。

Alice 发表于 2015-12-4 17:38:00

回复 1楼CanYou1的帖子

经过校验。
要通过DataRow.Visibility属性来控制行的隐藏和显示,无法通过XAML实现。
只能通过代码修改Row.Visibility属性。因此采用的方式是利用LoadingRow事件,在该事件里去判断IsDelete属性的值,当满足条件的时候,设置 e.Row.Visibility = System.Windows.Visibility.Collapsed;

CanYou1 发表于 2015-12-4 17:55:00

回复 3楼Alice的帖子

这种方式我是知道的,但是我要的不是直接改Row.Visibility,我要的是改Student的IsDeleted属性,然后通过Binding自动同步到界面去。不在xaml上写,在cs后台写也是可以的啊,关键是我在cs里也写不了绑定啊,能不能想想办法?

Alice 发表于 2015-12-7 09:33:00

回复 4楼CanYou1的帖子

很抱歉绑定做不到,只能通过代码设置DataRow.Visibility属性来设置。

CanYou1 发表于 2015-12-7 15:15:00

回复 5楼Alice的帖子

你确定不行?能不能使用DataEventTrigger?

Alice 发表于 2015-12-7 16:14:00

回复 6楼CanYou1的帖子

我理解您是想通过如下方式去实现绑定:
<Style.Triggers>
                        <DataTrigger Binding="{Binding 绑定到某个字段}" Value="True">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                  </Style.Triggers>

这种方案是行不通的。通过这种方式您只能设置DataGridRowPresenter,但Visible在这里是无效的。
实际上行的可见性是由'DataGridRow'的Visible属性来控制的。除此之外,我想不到更好的控制行可见性的方法。

CanYou1 发表于 2015-12-7 17:08:00

回复 7楼Alice的帖子

对啊,把这个Style应用到DataGridRow不行吗?类似如下:

<Style TargetType="C1DataGridRow">
<Style.Triggers>
                        <DataTrigger Binding="{Binding 绑定到某个字段}" Value="True">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                  </Style.Triggers>
</Style>

Alice 发表于 2015-12-7 18:09:00

回复 8楼CanYou1的帖子

很抱歉,不支持这样设置。

CanYou1 发表于 2015-12-7 18:18:00

回复 9楼Alice的帖子

为什么?难道给C1DataGridRow设置Style也做不到?
页: [1] 2
查看完整版本: 如何让DataGrid每一行根据其绑定的DataItem的一个属性值的变动而改变其显示或是隐藏的特性?