【问题标题】:wpf listview/gridview: hiding repeated contentwpf listview/gridview:隐藏重复的内容
【发布时间】:2010-10-14 04:53:50
【问题描述】:

我是 WPF 新手,不知道如何实现我所需要的。

我的问题:

我有一个显示 SQL 查询结果的数据绑定 WPF 网格视图。 一些列显示了我想隐藏的重复数据。 这个:

occupancy   name       room
---------   ---------  -----
Occupied    Bob        1
Occupied    Ted        2
Available              3
Available              4

应该是这样的:

occupancy   name       room
---------   ---------  -----
Occupied    Bob        1
            Ted        2
Available              3
                       4

我的环境:

在 .net 3.5 上使用 C#。我已将列表视图绑定到数据视图集合。我有一个用于控制格式的单元格数据模板。

我的初步解决方案:

我认为我应该对模板应用触发器并更改属性以使第一行之后的所有行上的文本都为空,其中数据与前一行相同。

当我设置触发器时,我可以在 xaml 中执行这一切,还是需要编写代码来访问前一行?

如果它在 XAML 中,您如何构造绑定字符串以引用它绑定到的数据视图的当前行和上一行中的列?由于没有上一行,它会在第一行窒息吗?

这是我正在使用的模板:

<DataTemplate x:Key="Occupancy">
    <TextBlock Name="Occupancy" Text="{Binding Path=Occupancy}" TextAlignment="Left" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Occupancy}">
            <DataTrigger.Value>Available</DataTrigger.Value>
            <Setter TargetName="Occupancy" Property="**{previous column's content}**" Value="**{current columns content}**"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

也许使用RelativeSource:PreviousData ??

如果我必须编写代码,是否有人知道可以让我开始的体面教程?

替代解决方案还可以,但我认为可以应用于许多列的无代码样式将是最佳解决方案。

感谢您的宝贵时间。

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    我对 RelativeSource:PreviousData 有过负面的体验。它在 ListBox 中工作,但在列表视图中我收到错误 “由于生成的上下文中没有父元素,因此无法找到用作 RelativeSource 的先前元素。”

    我终于放弃了,自己枚举了行(想法是用它来打印行号)。

    在您的情况下,我会使用带有列表元素的 ModelView,该列表元素将指向您的模型的相应元素和先前元素。所以如果previous和current的对应属性值相同,ModelView的元素就会返回null。

    【讨论】:

    • 我试图让 Sqlite 的人添加一个内置函数来返回查询结果集的行号,但他们没有看到其中的值 ;) 谢谢
    【解决方案2】:

    我对 WPF ListView 没有太多经验(我倾向于坚持使用更基本的控件/容器),但您是否考虑过尝试首先使用 LINQ 查询对原始数据进行分组?

    【讨论】:

    • 已经被sql查询分组了。一位同事指出,删除重复的内容并将其放入标题中会简单得多。我可能最终会这样做。顺其自然,在合理的时间内完成。不过感谢您的建议。
    【解决方案3】:

    之前的数据选项仅适用于 ListView,并且仅当您没有与之关联的 GridView 时。我相信这可能是因为与 ListView 控件挂钩的视图不会创建 ItemsControl 集合。查找先前数据的代码检查 ItemsControl 集合中的先前项。不过这只是猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2019-08-16
      • 2016-03-29
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      相关资源
      最近更新 更多