c# - 如何在使用过滤器时获取 CollectionView 的真实计数?

标签 c# .net wpf silverlight collectionview

当我有一个 <Label Content="{Binding ItemCount}"/>在我的 View 上绑定(bind)到 ViewModel 上的属性。

在 View 模型上,我将属性定义为

public int ItemCount
{
    get { RowViewModelsCollectionView.Count; }
}

我清楚地要求计数 CollectionView ,我希望获得仅可见项目的数量。不幸的是,我得到了整行的计数,即使是那些由于过滤器而没有显示在 View 中的行。

更新:

在 Ctor 中:

RowViewModelsCollectionView= new ListCollectionView(rowViewModels) {Filter = Contains};


private bool Contains(object obj)
        {
            RowViewModel rowViewModel = obj as RowViewModel;

            if (rowViewModel != null && Books.ContainsKey(rowViewModel.Book))
            {
                RaisePropertyChanged("ItemCount"); // Trying out to raise it without joy
                return true;
            }

            return false;
        }

我应该如何解决这个问题?

最佳答案

@punker76,正确的说法是应该直接对 Collection View 的 Count 属性进行绑定(bind)......

原因是 CollectionView 已经实现了 INotifyPropertyChanged 并在提交、过滤、分组、排序发生时通知其 Count 属性的属性更改它...

因此假设您将 RowViewModelsCollectionView 作为 View 模型的公共(public)/内部属性,

  <Label Content="{Binding RowViewModelsCollectionView.Count}"/> 

....应该工作得很好......

关于c# - 如何在使用过滤器时获取 CollectionView 的真实计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210836/

相关文章:

c# - 如何在 C# 中向 Excel 范围添加底部边框?

.net - 桌面单声道应用和 MVC/MVP 框架

.net - Entity Framework ——实体映射问题

c# - 具有相同View的ListView

.net - 你能强制鼠标移动吗?

c# - 使用 Newtonsoft JSON.NET 反序列化动态 Json 字符串

c# - 为什么此代码在 C# 中无效?

c# - Google Gmail API 定价

c# - 从 C# 确定父进程 ID

wpf - MouseEvent 不冒泡