问题标签 [collectionview]
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.
wpf - 异步调用 CollectionView.MoveCurrentToFirst?
异步调用 CollectionView.MoveCurrentToFirst?
.net - 我在哪里可以获得线程安全的 CollectionView?
在后台线程上更新业务对象集合时,我收到以下错误消息:
这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。
好的,这是有道理的。但它也引出了一个问题,CollectionView 的哪个版本支持多线程以及如何让我的对象使用它?
mvvm - 具有集合视图项目源的组合框不会在模型更改时更新选择框项目
很抱歉之前的冗长帖子。这是我的简明(!)描述。
我将集合视图作为 itemsSource 绑定到组合框,并将其 selectedvalue 与我的视图模型中的属性绑定。我必须保持 IsSynchronizedWithCurrentItem="False"。
我更改视图的源列表,然后刷新视图。更改(添加、删除、编辑)的项目正确显示在组合的项目列表中。但问题出在所选项目上。当我更改它的属性(也是组合的显示成员路径)时,更改的属性值不会反映在组合的选择框上。如果您打开组合下拉列表,它会正确显示在项目列表中,但不会显示在选择框上。
现在,如果我在 XAML 中将组合框标记更改为 Listbox(保持所有属性不变),那么当所选项目的 displaymember 属性值更新时,更改会反映在列表框的所选项目上。
为什么会出现这个问题?
仅供参考:
我的视图模型具有 EmployeeCollectionView 和 SelectedEmployeeId 属性,它们分别绑定为 ItemsSource 和 SelectedValue。此 VM 实现 INotifyPropertyChanged 接口。
我的核心员工类(其中的列表是 EmployeeCollectionView 的来源)只是一个没有 INotifyPropertyChanged 的模型类。
DisplayMemberPath 是员工模型类的“名称”属性。我通过某种方式对此进行了更改,并希望组合选择框能够更新该值。
我尝试通过将 SelectedEmployeeId 设置为 0(它正确地从 itemsSource 中选择虚拟“-- Select All -”员工条目)和旧的选定值来刷新 SelectedEmployeeId。但是没有用。旧值带我回到旧标签。物品集合虽然有最新条目。
当我在视图刷新之前和刷新后创建组合框的 IsEditable=True 时,我使 IsEditable=False 事情正常进行!
但这是一个补丁,没有必要。
谢谢
维尼特·桑赫
wpf - WPF:如何使用 ICollectionView 和 IEditableCollectionView 等视图
我了解语法,但不了解如何真正使用它。在许多基本场景中都很清楚,但是一旦它变得有点高级,我就开始头疼。
例如,有许多不同的视图,但通常不清楚使用哪个视图。您也应该始终只使用一种或混合搭配。您是否将视图用作 ItemsControls 的 itemssource?
我要给出一个场景。我有来自数据库的项目,我需要在应用程序中显示有关信息,还允许编辑和添加新项目。项目形成层次结构,模型具有不同的类型。所以顶层有孩子,然后他们有孩子。
我可以在 TreeView 或某些项目控件中显示它。这里的问题是我倾向于绑定到根元素的 children 属性,它返回一个儿童列表。现在孩子们并没有真正在视图中,就像我不能立即调用 editview.addnew() 或过滤孩子一样。问题是我如何确保孩子们也在视图中和他们的孩子等等。如果模型返回一个视图,我应该为每个子类型甚至每个父创建单独的视图吗?
另一件事是,如果我允许编辑,我应该将 Collections 直接放入 IEditableCollectionView 还是先将其包装在 ICollectionView 中(为什么会更好)?
是否有一个很好的指南来使用不仅仅是纯基础的视图?
c# - WPF ICollectionView 过滤器重置
我有一个CollectionView
派生自ObservableCollection
:
我的问题是,当过滤器的结果为空时,我想清除过滤器,并用其他条件重新过滤,但CollectionView
总是为空。
我尝试通过以下方式重置过滤器:
和
但他们都没有工作。
您能否提供一些建议如何在 a 上重置过滤器CollectionView
?
wpf - 访问 WPF DataGrid GroupItem DataTemplate 中的基础 ViewModel 属性
我有一个分组的 WPF DataGrid(标准的 Microsoft 数据网格),为我们的用户代表 UI 上的一些数据。
为了显示分组区域内的总数,我们在 XAML 中重写 GroupItem DataTemplate,如下所示:
目前,在运行时,TextBlock 文本绑定到 DataContext,这是一个 CollectionViewGroup,这很有意义,因为网格绑定到了一个包含我们数据源的 CollectionView。
但是,CollectionViewGroup 非常有限,无法访问其包含的 ViewModel,我们在其中存储属性,例如放置组的位置(我们在第一次布局网格时从列中收集坐标),并且需要绑定到例如,我们可以在组中给定列的上方/下方显示总数。
简而言之,我们试图从以 GroupItem 为目标的 DataTemplate 中访问的不仅仅是 CollectionView 对象。任何有关如何执行此操作的输入(或者是否有更好的方法来获取每列的总和以显示在组总模板中)表示赞赏。
编辑:到目前为止,一种解决方法是在我们的项目上有一个“父 ViewModel”属性,虽然这会使模型膨胀,但我希望有一种更直接的方法来做到这一点。
wpf - 分组的 CollectionView 的组可以水平呈现吗?
根据这个答案,我正在实现一个 ListBox,其 ItemsPanel 是 WrapPanel ,但有一个转折:我的 ItemsSource 是一个分组的CollectionView。将 aGroupStyle
应用于我的 ListBox 后,该问题中显示的换行不起作用:组始终垂直显示。
窥探我的应用程序,原因如下:
如您所见,WrapPanel,定义为我的ListBox 的ItemsPanelTemplate,出现在每个GroupItem内的ItemsPresenter 中;创建一个隐式的、垂直方向的 StackPanel(粉红色框中的顶部项目)以包含 GroupItems 本身。
有没有办法覆盖这种行为,所以 GroupItems 被放置在 WrapPanel 中?我是否必须重新模板化整个 ListBox?
更新:为了说明我对 ListBox 和 CollectionView 分组的实际操作,让我发布一点 XAML:
这GroupStyle
是它的核心:如果您删除它,GroupItems 不会被渲染,并且 WrapPanel(您可以在上面的屏幕截图中看到出现在 GroupItem 下方)代替屏幕截图中的 (StackPanel) 98 出现。
wpf - 过滤的 CollectionView 给出错误的计数
根据文档,过滤后的 CollectionView 的计数应该只是通过过滤器的项目的计数。鉴于此代码:
因此,我希望 testCount1 为 6,而 testCount2 为 3。但是,两者都是 6。如果我手动遍历 CollectionView 并计算项目,我确实得到 3,但 Count 总是返回 6。
我尝试在 CollectionView 上调用 Refresh,只是想看看这是否会纠正结果,但没有任何变化。文档有错吗?CollectionView 中是否有错误?我做错了什么我看不到的事情吗?
wpf - GroupStyles 是如何工作的?
我有一个 ListView 控件绑定到ListCollectionView
ViewModel 中的一个。
我想尝试对这些项目进行分组,但遇到了一些问题。
我将 VM 中的属性分组设置为开头,然后添加了一个GroupStyle
.
C#:
XAML:
但是列表现在只是类别名称,无法查看项目本身。
我并没有完全理解这里发生了什么。GroupStyle
当我为我真正绑定的内容创建模板时?除此之外还有其他属性Name
吗?
我刚刚添加GroupStyle
到我已经创建的 ListView 中,例如在其中包含ItemTemplate
. 那是在搞砸GroupStyle
吗?
如果列表中的项目属于另一个类,我不想根据它们所属的类的实例进行分组(它有一个 ID)。然后,我会将组名作为该父类的属性。那可能吗?
部分解决方案:
问题出在 ListView 上应用的样式。我不知道这种风格是什么意思。
完整解决方案
我没有ItemsPresenter
在我的列表框中ControlTemplate
使用 a 选择使用IsItemsHost
设置为的面板true
。似乎必须使用 ItemsPresenter 才能使 GroupStyling 正常工作。