有没有办法以编程方式更改“收藏夹视图”的默认项目?

时间:2019-09-30 12:33:22

标签: c#

我的程序中有一个集合视图,每当用户选择其他选项时,当前项目就会保存为用户设置。

MS docs状态“默认情况下,集合的第一项从当前项开始。” “默认”默认表示可以更改此设置(在我的情况下,我想更改为保存的设置),但是我找不到有关如何更改此默认值的任何信息。 (如果可能,我也想在不更改源集合顺序的情况下这样做。)

预先感谢

2 个答案:

答案 0 :(得分:1)

通过对类的定义的简要了解可以发现,初始值是在internal CollectionView(IEnumerable collection, int moveToFirst)中设置的,internal CollectionView(IEnumerable collection, int moveToFirst) { ... object currentItem = null; int currentPosition = -1; if (moveToFirst >= 0) { BindingOperations.AccessCollection(collection, delegate { IEnumerator enumerator = collection.GetEnumerator(); if (enumerator.MoveNext()) { currentItem = enumerator.Current; currentPosition = 0; } (enumerator as IDisposable)?.Dispose(); }, writeAccess: false); } _currentItem = currentItem; _currentPosition = currentPosition; ... } 是由该类的唯一公共构造函数调用的内部构造函数:

CollectionView

在这种情况下,默认行为不能被覆盖,因为在构造过程中,当前项设置为枚举中的第一项。

不过,如单独建议的那样,您可以从SetCurrent继承,然后使用受保护的方法public class MyCollectionView : CollectionView { public MyCollectionView(IEnumerable collection) : base(collection) { base.SetCurrent(xxx, yyy); } } 在构造过程中立即设置当前项目:

Name   ID  Result

Mark   11   Pass
Tom    22   Fail
Jane   33   Pass
Colin  44   Not Appeared

引用SetCurrent

答案 1 :(得分:0)

一个明显的解决方案(基于对这些文档的快速阅读)似乎是在创建集合时运行setCurrent方法。

second overload的文档甚至提到

  

可以从派生类的构造函数中调用此方法。

强烈暗示这是初始化集合时明智的做法(假设您从CollectionView-文档also note继承而来,则不应创建{{1}的实例})。