问题标签 [icollectionview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何判断 ICollectionView 当前是否可过滤?
我将 a 的属性绑定ItemsSource
到DataGrid
我的 ViewModel 中的一个属性。然后,我正在创建一个并使用的项目源ICollectionView
创建一个默认视图,如下所示:DataGrid
_displayItemsView = CollectionViewSource.GetDefaultView(_displayItems);
哪里_displayItems
是一个List
,_displayItemsView
是一个ICollectionView
。
现在我遇到的问题是我允许用户像这样过滤数据网格:
这在大多数情况下都很好用,但是如果用户当前正在编辑或添加一行,DataGrid
则ICollectionView
. 我应该如何去检测是否:
- 目前
DataGrid
正在修改或 ICollectionView
是不是处于被过滤的状态?
感谢任何指导,我对想法持开放态度。谢谢!
c# - WPF DataGrid 不返回 DataGridRow
我在 WPF 应用程序中使用 DataGrid,使用 for 循环逐个检索 DataGridRow 直到最后,目前我ICollectionView
在使用ICollectionView
我的 for 循环后对数据网格进行排序不起作用。
XAML 标记:
后面的代码:
c# - 如果它们被认为是相等的,则保持 ICollectionView 中的项目顺序
我有以下情况:我得到一个应该按SortId
属性排序的项目列表。
我已经IComparable<T>
在我的 ItemViewModels 中实现了接口,这样我就可以Comparer.Default
在我的ICollectionView.CustomSort
属性中使用来应用排序而不使用反射(PropertySortDescription
确实如此)。
现在,我的问题是这些项目有时没有SortId
设置属性,因为它们应该简单地按照它们在集合中出现的顺序进行排序。但是,项目不是保持顺序,而是以相反的顺序显示,有时甚至完全混合 - 这似乎取决于项目的数量。
有没有办法避免这种行为?如果我不应用任何排序,则项目以正确的顺序出现。但是,我必须根据项目的SortId
属性动态打开或关闭排序 - 我根本不喜欢......还有其他想法吗?
wpf - Load ICollectionView With Task Library
I've the following problem: if I load a simple list into ICollectionView which is bound on my wpf listbox, then CurrentChanged event being raised as I expected:
However, Imagine I'm loading data into another thread, then, I would like the same behaviors, that is raising currentChanged event, but it doesn't work:
Note that I'm using TaskScheduler.FromCurrentSynchronizationContext() in order to work on UI thread, however it doesn't work. I also tried with Application.Current.Dispatcher.Invoke without luck.
wpf - 绑定到集合的 Icollectionview 上的 wpf datagrid 拖动行
我有一个像这样的数据网格
当我尝试在这个数据网格上拖动行时,我可以获得集合视图上的行索引。但是这个索引并不能帮我获取集合_productsPosition中的相同元素,因为collectionView被过滤器修改了。
因此,我有一个问题,我怎样才能在 collectionview 上移动元素而不是 _productsPosition。像这样抛出异常的东西:
异常的内容是:
未处理的异常:System.InvalidOperationException:使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素。
在 System.Windows.Controls.ItemCollection.CheckIsUsingInnerView()
在 System.Windows.Controls.ItemCollection.RemoveAt(Int32 removeIndex)
工作样本:
拖拽功能:
wpf - Detect when DataGrid have and dont have content
I want to Bind a Button IsEnabled property to DataGrid property/Event when it has a Content. The DataGrid's Item Source is an Observable collection but Since I implement Filtering, what is displayed can be different from the ItemSource collection.
Is there an event or Property of DataGrid that gets fired when the View is empty or not empty?
c# - EF LoadAsync 后刷新视图
假设要加载大量数据,我希望 UI 在加载数据时能够响应。目前唯一有效的代码是以下不断刷新不需要的 UI 的代码。如何在非 UI 线程中加载数据并在视图中获取最终更新?
注意:如果我删除对 的调用EnableCollectionSynchronization
,则会加载数据,但ICollectionView
它SourceCollection
只有一项。
c# - 根据属性的名称查找不同的元素
我正在尝试构建一个通用过滤器控件,它在数据网格中显示唯一值,并让用户过滤网格中特定列的唯一值。
我喜欢为这个问题提出的答案,但是所有这些都要求您事先了解该属性。我想让代码符合 OCP,并且只有一种方法可以获取属性名称字符串并在其上应用不同的函数(可能使用反射)。考虑到我的列(因此要过滤的列名,如名称、年龄等是动态的),这个问题的最佳解决方案是什么。
具体来说,我试图避免这种 switch case 语句:
并有一个像这样的通用方法:
仅供参考 - 我在 ViewModel 中的集合是 ICollectionView 类型(猜测在 CollectionView 中已经定义了类似的东西来执行我正在寻找的那种过滤)。
c# - Wpf - ICollectionView 刷新导致样式覆盖失败
我有一个菜单项和上下文菜单样式的默认样式,如下所示:
在绑定到可观察集合的列表视图项上显示上下文菜单时,我需要覆盖样式如下:
这工作正常,直到我收到我在绑定的 ObservableCollection 中创建的事件以在任何属性发生更改时通知我,使用它以便我可以刷新 ICollectionView,这将导致列表视图的当前排序保持真实。但是,如果发生此事件时在列表视图上打开上下文菜单,它将恢复为默认样式而不是覆盖样式。
任何帮助将不胜感激?我怀疑这是我忽略的简单事情。
c# - 绑定到 ICollectionView 不起作用
所以,我正在制作一个通过 ItemsControl 分配 ViewModel 的 UserControl 列表
上面的代码有效,但我想在不更改数据的情况下将其反转,所以:
在我的 ViewModel 中的某个地方,我通过断点检查了代码是否已执行
但它突然不起作用。它不会在任何地方返回错误,但 UserControlA 现在没有正确呈现。(用户控件不显示其数据 - 存储在 上REVERSEDListOfViewModels
)
知道为什么吗?