问题标签 [listcollectionview]

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.

0 投票
1 回答
876 浏览

c# - 尝试将空白行添加到 Telerik RadGrid 的空引用异常

有人可以告诉我为什么我在尝试执行下面的添加时不断收到 NULL 引用异常吗?这仅ObservableCollection在开始时为空时发生。如果从一开始就在集合中存在数据,则它可以正常工作。

加载ObservableCollection和设置集合ViewSource

将新记录添加到空数据网格

0 投票
1 回答
4022 浏览

c# - 对排序的 ListCollectionView/ObservableCollection 应用过滤器

我有的

我有一个UserControl由 aTextBox和 a组成的ListBox。正如我们将在下面看到的,它通过自定义排序和过滤器绑定ListBox到a ItemsSourcein ObservableCollectiona 。该控件的目的是在源集合中仅显示包含. 为此,我在.DataContextListCollectionViewListBoxstringTextBoxListCollectionView

我有两个额外的限制。1,我的原始收藏没有按字母顺序排序,但显示的项目ListBox使用ListCollectionView CustomSort. 2,我必须只显示与TextBox. 我为此应用了一个过滤器ListCollectionView

期待

假设我的收藏在 my 中定义为DataContext

在我的输入中,TextBox我输入了字母“e”(所有比较都是不区分大小写的)。我希望ListBox显示以下 5 项(CurrentUICulture设置为 fr-FR):

  • 苹果
  • 苹果
  • 樱桃
  • 胶带
  • 胶带

因为它们是按字母顺序排序时包含字母“e”的前 5 个项目。但是,我在我的应用程序中得到以下项目:

  • 苹果
  • 葡萄
  • 菠萝
  • 西瓜

因为它们是我收藏中包含字母“e”的前 5 个项目,然后按字母顺序排序。

我的代码

这是了解我所拥有的和我的问题的代码。它实际上只能使用以下内容的复制/粘贴来工作(注意命名空间和CurrentUICulture)。我正在使用 C# 4.0。

1) 的MainWindow

2)用作类DataContext

3) 我的 XAMLUserControl

4)最后,最重要的是我的UserControl Foobar.

整个代码按预期工作,除了在ApplyFilter方法中完成的过滤。基本上,这个方法只是检查集合中的每一个项目,TextBox如果没有超过返回的最大项目数,则该项目将包含在过滤器中。当我调试这个方法时,我可以看到项目是按集合的原始顺序浏览的,而不是按排序顺序浏览的,尽管过滤器似乎是ListCollectionViewObservableCollection<string>.

似乎首先应用过滤器,然后是排序。我希望先应用排序,然后再应用过滤。

我的问题

如何将过滤器应用于已排序ListCollectionView而不是原始未排序集合?

0 投票
1 回答
638 浏览

wpf - WPF DataGrid 自定义排序,其中一些记录被锁定

我有一个实现了自定义排序的 WPF Datagrid,它工作正常。我需要将集合中的一些记录锁定到顶部和底部(顶部锁定和底部锁定)。因此,当特定记录被顶部锁定时,它应该是集合中的第一条记录,而不管所选列的任何值(即我不想对那些顶部锁定和底部锁定的行进行排序)。这是我的自定义排序方法。

其中LineSorter是我的带有IComparer实现的自定义排序器类。这工作正常。现在我想对 ListCollectionView 应用 Top lock 和 Bottom lock。我已经用上面的代码尝试了下面的代码,但它没有任何变化(即列表仅基于自定义排序列进行排序)。

有什么办法可以做到这一点,还是我需要手动删除然后添加锁定的记录。请建议..

0 投票
2 回答
1420 浏览

wpf - ListCollectionView.CurrentPosition 设置器

ListCollectionView 有一个获取当前位置的属性(CurrentPosition):

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.currentposition.aspx

但是这个属性是只读的。

获取 CurrentItem 在(可选地排序和过滤的)视图中的序号位置。

那么如何设置当前位置呢?我希望这不涉及行为...

我需要滚动到 ListView 或 DataGrid 的顶部,在我看来,应该可以轻松地设置一个属性来实现它,而无需进入视图的内部。

提前致谢。

更新:

目前这是我自己的解决方法 - 但它有点令人讨厌 - 当一个人想要使用 MVVM(使用 F#)时:

0 投票
1 回答
6929 浏览

wpf - ListCollectionView - GroupDescriptions - 如何获取分组项目计数?

我有一个ListCollectionView使用PropertyGroupDescription如下所示分组的实例

分组工作正常,但我想显示分组项目的计数,如下所示。

在此处输入图像描述

是否可以显示计数?

这是我创建的示例应用程序。

后面的代码:

XAML:

0 投票
1 回答
3543 浏览

c# - 刷新 ListCollectionView 将 ComboBox 中选中项的值设置为 null

我对 aListBox和两个ComboBoxes 有看法。当我在 中选择一个项目时ListBox,es 的内容/值会ComboBox根据所选项目的属性值进行刷新。在我的场景中,ListBox持有客户列表,第一个ComboBox持有国家列表。所选项目是客户的原籍国。第二个ComboBox包含城市列表。所选城市是客户的来源城市。

第二个的ItemsSource属性ComboBox绑定到一个ListViewCollection基于使用过滤器ObservableCollection所有城市中的一个。当国家/地区的选择ListBox发生变化时,我刷新过滤器以仅显示属于所选国家/地区的城市。

假设客户 A 来自新西兰奥克兰,客户 B 来自加拿大多伦多。当我选择 A 时,一切正常。第二ComboBox个仅包含新西兰城市,并选择了奥克兰。现在我选择 B,选择的国家现在是加拿大,城市列表只包含加拿大城市,多伦多被选中。如果现在我回到 A,在国家/地区中选择了新西兰,城市列表仅包含来自新西兰的城市,但未选择奥克兰。

当我调试这个场景时,我注意到当我选择 B 时,调用将ListCollectionView.Refresh()最初选择的客户端 A 上的城市值设置为null(在调用 Refresh 时放置一个断点,在模型上的城市设置器上放置另一个断点,见下面的代码)。

- 虽然我不是 100% 肯定 - 它正在发生,因为我对城市有一个TwoWay绑定,当过滤器将列表更新为加拿大城市时,奥克兰消失了,并且此信息被发送回该物业然后更新为. 在某种程度上,这是有道理的。SelectedItemComboBoxnull

我的问题是:我怎样才能避免这种情况发生?ItemsSource仅在刷新时如何防止更新模型上的属性?

下面是我的代码(虽然我试图使其尽可能少的代码使问题可重现,但它有点长):

现在这里是 XAML:

如果有任何帮助,这也是我ComboBox处理国家选择更改通知的自定义代码。

对于这个简化的示例,我在 my 的构造函数中创建并填充视图模型Window,这里:

应该可以通过简单地复制/粘贴所有上述代码来重现该问题。我正在使用.NET 4.0。

最后,我阅读了这篇文章(和其他一些文章)并尝试将给定的建议调整/应用到我的案例中,但没有任何成功。我想我做错了:

我也读过这个问题,但如果我ListBox变大,我可能最终不得不明确地跟踪数百个项目,如果可能的话我不想这样做。

0 投票
1 回答
2495 浏览

c# - 在 WPF 中以编程方式从 DataGrid 中删除排序箭头

在我的 WPF 应用程序中,我有DataGrid一些列显示我的可排序数据。用户可以对他想要的任何列进行排序和子排序。

我添加了一个按钮,该按钮应该DataGrid使用 MVVM 模式清除排序并将其返回到未排序状态(这意味着该按钮绑定到RelayCommandViewModel 中的 a,这将清除 DataGrid 的数据源的SortDescriptions.)

这是代码现在的样子:

DataGridDataSourceGroupedItems对象(类型为ListCollectionView)。当我单击该按钮时,我看到 DataGrid 返回到其原始的未排序状态,但是,列标题中的排序箭头保持不变,就好像 DataGrid 仍在排序一样。如何以编程方式删除这些箭头?

0 投票
1 回答
1432 浏览

c# - 如何替换可枚举集合的默认 CollectionView?

将枚举绑定到 ItemsSource 或类似内容时,绑定使用枚举的默认视图,我知道您可以使用以下代码获得该视图...

这对我们来说非常有用,例如,允许我们将排序权添加到各种集合的默认视图中。

但是,我们有一个专门的 Collection 类,它需要专门的 ListCollectionView 子类才能正常工作。也就是说,我们如何更改其默认视图,以便在有人直接绑定到集合时返回?

作为一种解决方法,我们创建了一个名为 MainView 的新属性,它保存了我们的自定义 ListCollectionView,然后我们将诸如 ItemsSource 之类的东西绑定到该属性,但这意味着我们的集合的消费者必须被明确告知不要直接绑定到集合,而是MainView 属性,否则他们将获得默认视图。考虑到标准只是直接绑定到集合,这是我们试图避免的潜在问题。

再说一次,我怎样才能将我自己的 ListCollectionView 子类指定为我们自定义集合的默认视图?

0 投票
1 回答
1225 浏览

c# - CollectionViewSource、ICollectionView、ListCollectionView、IList 和 BindingListCollectionView 及其用例有什么区别?

CollectionViewSource, ICollectionView,ListCollectionViewIList之间有什么区别BindingListCollectionView
何时何地使用所有这些集合?

我知道. CollectionViewSource_CollectionViewSourceListCollectionView

你能解释一下每种集合的确切区别和用例吗?

0 投票
2 回答
488 浏览

wpf - ListCollectionView 多次分组

我有一个实现ListCollectionView的用户控件,当我单独运行它时它工作正常,但是当我把它放在另一个用户控件中时,它是动态创建选项卡的动态 tabControl,真正的问题是当我创建第二个选项卡时,分组发生 2 次,如果我创建第三个选项卡,然后分组发生 3 次,依此类推。我参考了链接http://www.codeproject.com/Articles/493538/Add-Remove-Tabs-Dynamically-in-WPF 来创建动态选项卡,然后

下面的代码在我的缩略图用户控件中

在上面的代码中,当第一次工作正常时单击新选项卡时,我将为我的缩略图 usercoontrol 创建新对象,如下所示

第一次,第一个标签加载我的缩略图用户控件 当我单击第二个选项卡时,它分组两次,如下所示,此外,第二个分组也发生在第一个选项卡中,即使我使用过

AddtabItem方法中

分组两次 分组三遍

我调试了很长时间,但无法找出原因。提前致谢。