c# - 有没有办法以编程方式更改集合视图的默认项?
问题描述
我的程序中有一个集合视图,只要用户选择不同的选项,当前项目就会保存为用户设置。
MS 文档状态“默认情况下,集合的第一个项目作为当前项目开始。” “默认情况下”严重暗示这可以更改(在我的情况下,我想更改为保存的设置),但我找不到有关如何更改此默认值的任何信息。(如果可能的话,我也想在不改变源集合的顺序的情况下这样做)。
提前致谢
解决方案
简要浏览类的定义可以发现初始值设置在 中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的参考。
推荐阅读
- wpf - WPF:使用 WPF 和 C# 的 TabControl 的 TabItem 标题样式
- python-3.x - 将 pyspark 与 pybuilder 一起使用
- angular - 失败:未捕获(承诺):错误:无法匹配任何路由。URL 段:“登录”。茉莉和角 6
- c++ - MFC/C++ ComboBox:禁用下拉关闭和打开的绘制(UI 冻结)
- javascript - 获取计算表达式的总和取决于Angular中的模板变量?
- python - 将 Pandas 数据框保存到 AWS Redshift 中的 PostgreSQL 服务器
- reactjs - 带有 react-form 库、预填充输入的受控组件
- symfony - JWTRefreshTokenBundle,类 gesdinet.jwtrefreshtoken 不存在
- guice - Google Guice:公开一个命名对象,但在没有名称的模块中保持它可用
- kubernetes - OpenEBS 是否支持 arm64 架构?