在我的项目中,我目前有一个ObservableCollection,该>在ViewModel构造函数内部填充.此ObservableCollection保留一个具有两个属性(两个字符串)的自定义对象. 当前,XAML/View对应物包含两个单独的列表框,它们都符合到A DataTemplate的键,该列表选择了要显示的属性作为ListBox的条目.在这种情况下,它显示"属性". 是否可以拥有一个可以选择每个ListBox item的位置,取决于'propertytwo'的内容? 我研究了与我的情况类似的示例,这些示例使用了CollectionViewSource,但是我不太确定如何将其实施到项目中,因为我对使用WPF并遵循MVVM结构是相当陌生的.这是否涉及在代码视图中创建过滤事件? 下面列出的是我的代码段,我认为这对于理解我的问题很有用.解决此问题的任何帮助将不胜感激. 查看
以下是关于 collectionviewsource 的编程技术问答
看来,在 winrt 中无法用CollectionViewSource过滤ObservableCollection: 请参阅此处! 我可以使用 linq 过滤,但是如果进行了影响过滤数据的更改,我如何使 ui 更新? 解决方案 我最终写了自己的班级以达到所需的效果: public class ObservableCollectionView : ObservableCollection { private ObservableCollection _view; private Predicate _filter; public ObservableCollectionView(IComparer comparer) : base(comparer) { } public ObservableCollectionView(IComparer comparer,
我有一个项目的观测值,我需要能够更新并使用IcollectionView表示数据. 这是代码的相关位: private ObservableCollection heroesDBHeroes; public ObservableCollection HeroesDBHeroes { get { return heroesDBHeroes; } set { heroesDBHeroes = value; OnPropertyChanged("HeroesDBHeroes"); } } private void HeroesDBAddHeroes() { if(HeroesDBHeroes != null) { HeroesDBHeroes.Clear(); } HeroesDBHeroes = Hero.GetA
我一直在使用绑定到listView的收集视图源对象,而CVS是可观察到的对象集合的视图. 我知道如何使用以下技术应用过滤器: cvs.Filter += new FilterEventHandler(SomeFilterFunction); 当您仅在一个函数中过滤时,这正常工作.问题是我想在已经过滤的CVS上过滤时.如果我具有基于不同标准过滤视图中对象的另一个函数,则仅根据第二个过滤器中的标准过滤对象,并且第一个过滤器的结果消失了. 这是一些示例代码来解释我的问题: cvs.Filter += new FilterEventHandler(SomeFilterFunction1); cvs.Filter += new FilterEventHandler(SomeFilterFunction2); public void SomeFilterFunction1(object sender, FilterEventArgs e) { SomeObj
当CompositeCollection的当前位置更改时,是否有办法通知? 我需要通过收集视图监控CompoSiteCollection,任何想法都均为 . 解决方案 您可以通过监视收集视图的ICollectionView.CurrentChanged事件来检测当前项目何时更改.以下代码对我有用: CompositeCollection cc = new CompositeCollection(); cc.Add(new CollectionContainer { Collection = new string[] { "Oh No!", "Fie" } }); cc.Add(new CollectionContainer { Collection = new string[] { "Zounds", "Ods Bodikins" } }); CollectionViewSource cvs = new CollectionViewSource { Source =
我有一个WPF ListBox,我想在上面添加分页,因为它开始使用大量项目开始缓慢.我的问题是我使用分组,排序和过滤.这意味着,如果我要使用linq skip()和take()方法限制数据,或者使用类似分页的ObservableCollection之类的内容,则分组和排序将是错误的,因为它仅应用于数据的第一页.过滤甚至会更糟,因为它只会过滤当前显示中显示的数据,这意味着您必须在页面上显示它才能搜索它. 我不太热衷于重写所有逻辑的想法.我看到Silverlight 3正在获得PageCollectionView(但据我所知,.NET 4中的WPF没有得到它).有没有人以前实施过这样的事情,或者对我该如何解决这个问题有任何想法? 解决方案 查看我已经实施的简单分页的观测值 - 适用于Silverlight以及WPF
我有一个针对MVVM框架开发的WPF应用程序,在该框架中,ViewModel构造函数设置了带有TimerCallback的计时器. TimerCallback检索观测值并将其传递到VM上的字段. 我有一个CollectionViewSource,其源属性设置为ObservableCollection.我正在使用CollectionViewSource,因为我想在集合上启用过滤. 我发现,当TimerCallback试图将ObservableCollection传递到本地字段时,CollectionViewSource的源属性有一个异常{"调用线程无法访问此对象,因为一个不同的线程拥有它.}. 我理解例外,但我有两个问题: 如何解决这个问题? 更重要的是,为什么我只有在使用CollectionViewSource时才能遇到这个问题?如果我删除CollectionViewSource并将ObservableCollection作为公共财产,那么我就没有这样的例
我目前正在实施显示层次结构使用ListBoxes(请不要建议使用TreeView,ListBoxes). 看起来 类: public class Mountains : ObservableCollection { public ObservableCollection Lifts { get; } public string Name { get; } } public class Lift { public ObservableCollection Runs { get; } } 该示例使用CollectionViewSource实例(请参阅XAML)来简化设计. Mountains类的实例是窗口的DataContext. 问题是:我希望Mountains类具有SelectedRun属性,应将其设置为当前选择的运行. public class Mountains : Obse
我已经编写了一个带有搜索扩展名的自定义WPF控件,让我们命名MyControl. 控件是ItemsControl类的后裔. 因此,我这样的数据源将其提供给: 控件本身使用 protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue) { if (newValue != null) { ICollectionView view = CollectionViewSource.GetDefaultView(newValue); view.Filter += this.FilterPredicate; } if (oldValue != null) { ICollectionView view = C
我有一堆连击,它们都共享相同的可用选择.这些选择是在我的ViewModel暴露的集合中提供的.一切都很好,花花公子. 我现在要分类这些选择,因此我决定从我的ViewModel而不是通常的ReadonlyObservableCollection中露出ICollectionView,然后在我的ViewModel中对集合视图进行排序. class EditStuffViewModel : ViewModelBase { public EditStuffViewModel (ObservableCollection choices) { Choices = new CollectionViewSource() { Source = choices }.View; Choices.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.As
好,所以这个问题与Windows Phone 7/Silverlight有关(更新WP7工具,2010年9月),专门过滤了下面的ObservableCollection. 在使用WP7模板枢轴控制应用程序时,我遇到了一个问题,在该问题中,更改ObservableCollection中的基础项目不会导致更新的屏幕上的列表框.基本上,示例应用程序具有两个枢轴,第一个枢轴直接绑定到下面的ObservableCollection,第二个枢轴与CollectionViewSource绑定(即,在基础ObservableCollection上表示过滤的视图). . 正在添加到ObservableCollection实施INotifyPropertyChanged的基础项目,例如: public class ItemViewModel : INotifyPropertyChanged { public string LineOne