选择RadGridView标题列中的所有CheckBox,其中包含可过滤列和行虚拟化

时间:2013-03-28 02:18:25

标签: wpf mvvm telerik virtualization radgrid

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

当选中标题栏上的CheckBox时,我无法更新Binded集合中的值,因为用户可能会对某些列应用过滤器。

所以,我尝试了以下内容:

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

然后我遍历行并更新其数据上下文。此解决方案工作正常,但在打开行虚拟化时不能很好地工作。它只更新屏幕上的VIsible行。我们必须处理大量数据,因此我们无法关闭行虚拟化。

我有一个解决方案,但我发布这个以获得更多关于如何以快速和更好的方式解决这个问题的想法。

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

2 个答案:

答案 0 :(得分:0)

我不知道telerik如何实现过滤器。

但是,如果 radgrid 使用ICollctionView来过滤集合,您可以将您的集合创建为 ICollctionView ,并遍历已过滤的项集合。< / p>

var myCollectionView = CollectionViewSource.GetDefaultView(myDataSource);

...

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

请注意,仅当ViewModel中的 ICollcetionView 与telerik radgrid 使用的 ICollcetionView 相同时,此功能才有效。

答案 1 :(得分:0)

LOL,这个问题的解决方案结果非常简单,RadGridView上的“Items”属性包含过滤的项目,而不是数据源中的项目。所以,我用了那个!