首页 > 解决方案 > 有没有办法以编程方式更改集合视图的默认项?

问题描述

我的程序中有一个集合视图,只要用户选择不同的选项,当前项目就会保存为用户设置。

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

提前致谢

标签: c#

解决方案


简要浏览类的定义可以发现初始值设置在 中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);
    }
}

SetCurrent的参考。


推荐阅读