我的程序中有一个集合视图,每当用户选择其他选项时,当前项目就会保存为用户设置。
MS docs状态“默认情况下,集合的第一项从当前项开始。” “默认”默认表示可以更改此设置(在我的情况下,我想更改为保存的设置),但是我找不到有关如何更改此默认值的任何信息。 (如果可能,我也想在不更改源集合顺序的情况下这样做。)
预先感谢
答案 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}的实例})。