- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 Entity Framework 查询数据库并将结果放在 ICollectionView
中的方法。 ICollectionView
充当 DataGrid
的 ItemsSource
。第一次查询一切正常,但在第二次查询时,尽管应用了正确的 SortDescriptions
,但数据没有正确排序。
这是我尝试查询和分组/排序数据的代码:
CollectionViewSource cvsRS;
private ObservableCollection<productorder> rs;
public ObservableCollection<productorder> RS
{
get { return rs; }
set
{
if (rs != value)
{
rs = value;
OnPropertyChanged("RS");
}
}
}
private ICollectionView rsView;
public ICollectionView RSView
{
get { return rsView; }
set
{
if (rsView != value)
{
rsView = value;
OnPropertyChanged("RSView");
}
}
}
public void QueryDatabase()
{
RS = new ObservableCollection<productorder>(DatabaseEntities.productorders.Where(o => o.month.id == CurrentMonth.id));
if (RS != null)
{
cvsRS.Source = RS;
RSView = cvsRS.View;
RSView.GroupDescriptions.Clear();
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.productcategory.name"));
RSView.GroupDescriptions.Add(new PropertyGroupDescription("producttype.name"));
RSView.SortDescriptions.Clear();
RSView.SortDescriptions.Add(new SortDescription("producttype.productcategory.sortorder", ListSortDirection.Ascending));
RSView.SortDescriptions.Add(new SortDescription("client.name", ListSortDirection.Ascending));
RSView.Refresh();
CurrentRecord = null;
SelectedRecords = null;
}
}
分组工作正常,但根据排序,分组的顺序不正确。我已经尝试了许多可能的“修复”但没有成功(例如,将排序/分组描述直接添加到 CollectionViewSource
,在分组之前排序,删除一些排序/分组,删除 SortDescriptions
每 CollectionViewSource does not re-sort on property change )。
有谁知道无论执行了多少查询如何保持排序顺序?如果可能的话,我愿意接受在 DataGrid
中查询显示数据的替代方法。
最佳答案
尝试绑定(bind)您的 CollectionViewSource.Source
属性(property)给你ObservableCollection<T>
属性(property)。在 View 模型构造函数中设置绑定(bind)。然后,别管它了。更新 ObservableCollection<T>
,替换它,等等。只要它是 ObservableCollection<T>
及其公共(public)属性(property)筹集PropertyChanged
每当您更换它时,整个系统都会正常工作。
public MyViewModel()
{
BindCollectionViewSource();
}
protected void BindCollectionViewSource()
{
cvsRS = new CollectionViewSource();
var binding = new Binding
{
Source = this,
Path = new PropertyPath("RS")
};
BindingOperations.SetBinding(cvsRS, CollectionViewSource.SourceProperty, binding);
}
// Since we're not going to be messing with cvsRS or cvsRS.View after the
// constructor finishes, RSView can just be a plain getter. The value it returns
// will never change.
public ICollectionView RSView
{
get { return cvsRS.View; }
}
您不能只将绑定(bind)分配给 Source
;不仅如此。 Source="{Binding RSView}"
您在 XAML 中看到的东西可能看起来像一个赋值,但为了方便起见,一些细节被隐藏了。 Binding
积极做事。它需要知道目标对象是谁。
我确实看到一件有趣的事:我给了我的测试代码一个PropertyGroupDescription
和一个SortDescription
.当我将项目添加到集合中时,它会在组内对它们进行排序。然后当我调用 RSView.Refresh() 时,它在不引用组的情况下使用它们。不确定我明白它在那里做什么。
关于c# - 更改源后 ICollectionView 排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40343890/
我不明白为什么我的 ICollectionView 没有刷新。谁能解释我做错了什么? 我做了这样一个 View 模型: class ViewModel : INotifyPropertyChanged
有什么办法吗 ICollectionView.Refresh() 或者 CollectionViewSource.GetDefaultView(args.NewValue).Refresh(); 在
我已经编写了用于在 ComboBox 中过滤项目的代码: 我的问题是,你会怎么做? 我认为这个带有反射的解决方案可能会非常慢.. ICollectionView view = CollectionVi
我有一个 ObservableCollection : public ObservableCollection Collection { get; set; } = new ObservableCol
ImageAlbums是一个 ICollectionView类型和 GlobalCollection.MyImageAlubms是一个 ObservableCollection类型。 ImageAlb
也许有人可以帮助我?我有以下场景: 一个简单的 View : Refresh 背后的代码: publ
我有 3 个级联 ICollectionView s 在我的 View 模型中,其中一个依赖于另一个。 第一个不绑定(bind)到 View 上的控件,而是用作两个即将出现的作为主细节显示给用户的键过
我正在尝试在 WPF 中实现 MVVM 模式。我关注了 Jeremy Alles 的 Very simple MVVM demo application 。我有一个 ListBox,它绑定(bind)
我在我的 View 模型中将一个 ListView 绑定(bind)到一个 ICollectionView。 ICollectionView 有一些预定义的过滤器,当您单击某些按钮时会应用这些过滤器。
我有一个类 Class ABC() { public string Name{get;set;} public string Category{get;set;} } 由此类形成的列表
我创建了一个小型用户控件,其中包含一个 ICollectionView 和一个 ObservableCollection。 ObservableCollection messages; public
我有一个名为 ItemType 的对象的集合,每个集合都有一个 Item 的子集合。顶级集合被包装到一个 ObservableCollection 中,因此它会在用户从集合中添加或删除内容时做出响应。
我有一个使用 Entity Framework 查询数据库并将结果放在 ICollectionView 中的方法。 ICollectionView 充当 DataGrid 的 ItemsSource。
有什么方法可以自动更新 ICollectionView 上的过滤器,而无需在进行相关更改时调用 Refresh()? 我有以下内容: [Notify] public ICollectionView W
如何在 C# 中从 ICollectionView 中删除项目? Dictionary entityDict; public ICollectionView DictView { get; set;
我有一个 .Net 4.5 应用程序正在迁移到基于 WPF 的 RxUI(在撰写本文时保持最新,6.0.3)。我有一个文本字段,它应该用作具有相当常见的 throttle 等的过滤器字段,这些东西首先
所以我有一个数据网格,我需要为其添加自定义排序,我还需要知道排序的确切顺序。 我已阅读,为了做到这一点,我需要实现自定义 icollectionview 并将其绑定(bind)到数据网格。 我遇到的问
我有 ICollectionView 看起来像 public ICollectionView UsersCollectionView { get { var view
我将 ObservableCollection 绑定(bind)到 dataGrid,现在我想过滤显示的数据 我发现我需要使用 ICollectionView 但我不确定如何使用我的 MVVM 模式添
我是WPF的新手,看起来我也不完全理解C#。 下面的代码应该向 DataGrid 提供排序后的数据。 这是我难以理解的代码: ObservableCollection PersonsCollectio
我是一名优秀的程序员,十分优秀!