我有一个模型对象树,我使用分层数据模板在 TreeView 中显示它。每个模型对象都使用 ValueConverter 动态转换为 ViewModel 对象,但模型的属性仍然绑定到分层数据模板中的子项。
我遇到的问题是模型对象将它们的子对象存储在字典中,并且它特别是值,而不是我对客户端感兴趣的键。字典不是可观察的,所以我正在寻找的是 - 在一个理想的世界中 - 一种包装字典的方法(或者更具体地说,字典在“值”属性上使用的内部 ValueCollection,以使其可观察.
我已经深入研究了字典的来源,看看是否有任何隐藏的钩子可以反映,但我什么也看不到。
有人有建议吗?
编辑:
我想要的行为实际上是这样的:
var nonObservable = new Dictionary<Guid, object>();
var observableDictionary = new ObservableDictionary<Guid, object>(nonObservable);
observableDictionary.CollectionChanged += //Some event handler
nonObservable.Add(Guid.NewGuid, new object());
当我将对象添加到不可观察字典时,我希望在包装器上触发一个集合更改事件。这可能需要一些深刻的反思。这是一种我宁愿避免的 hacky 方法,但我也不喜欢其他替代方法。