【问题标题】:Select All CheckBox in RadGridView Header Column with Filterable Columns and Row Virtualization ON选中 RadGridView 标题列中的所有复选框,可过滤列和行虚拟化打开
【发布时间】:2013-03-28 02:18:25
【问题描述】:

我有一个带有可过滤列的 RadGridView。我需要在列标题中添加一个复选框,以检查作为某些过滤器结果的所有行(如果使用)。

当 Header Column 上的 CheckBox 被选中时,我无法更新 Binded 集合中的值,因为用户可以将过滤器应用于某些列。

所以,我尝试了以下方法:

var rows = EntityDataGridView.ChildrenOfType<GridViewRow>();

然后我遍历行并更新其数据上下文。此解决方案运行良好,但在启用行虚拟化的情况下效果不佳。它只更新屏幕上的可见行。我们必须处理大量数据,因此我们无法关闭行虚拟化。

我有一个解决方案,但我发布此内容是为了获得更多关于如何以更快更好的方式解决此问题的想法。

我有它的解决方案,我将RadGridView的过滤器描述符传递给视图模型,然后手动将过滤器应用于视图模型中的集合,然后更新复选框状态。但是有没有更好的方法来处理这个问题?

【问题讨论】:

  • 你能告诉我们XAML代码吗?

标签: wpf mvvm telerik virtualization radgrid


【解决方案1】:

我不知道 Telerik 是如何实现过滤器的。

但是,如果它的 radgrid 使用 ICollctionView 过滤集合,您可以将您的集合创建为 ICollctionView,并遍历过滤的项目集合。

var myCollectionView = CollectionViewSource.GetDefaultView(myDataSource);

...

foreach(var item in myCollectionView.OfType<TypeOfTheElement>())
{
    item.IsChecked = value;
}

请注意,只有在ViewModel 中的 IColllcetionView 与 telerik radgrid 使用的相同时,这才有效。

【讨论】:

  • 也许上述解决方案有效,但对我来说改变太大了,因为 View Model 中的许多方法处理数据源的类型而不是 CollectionViewSource。另外,我找到了一个更简单的解决方案来解决这个问题。无论如何,谢谢你的帮助。
【解决方案2】:

大声笑,这个问题的解决方案非常简单,RadGridView 上的“Items”属性具有过滤后的项目,而不是来自数据源的项目。所以,我改用那个!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2011-11-26
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多