我搜索了两个多星期才找到答案。这通常意味着要么我是瞎子,要么这个想法是荒谬的。不管怎样:
在一个中等规模、相当灵活的项目中,我将配置数据存储在一个分层结构中,如下所示:
-
配置(集合)
-
音频(类)
-
basedir(结构)
-
播放模式(枚举)
-
输入(类)
-
校准连接(BOOL)
-
知识设备(集合)
-
…(班)
-
使用设备(整数)
-
播放列表(收藏)
-
第一音频(类)
-
…
我已经设法以mvvm模式在treeview中显示了这些内容。由于我不能确切地知道将来会添加哪些选项,所以我使用了一种通用方法,为
class
,
ienumerable
我的习惯
structs
基本价值类型(
string
,
bool
,
enum
,……)
在我的xaml中,它们有相应的(分层的)数据模板,例如,对于布尔值有一个复选框,对于常规值类型有一个文本块。
每个viewmodel实例都有一个字段来存储基础模型的数据。
我可以在视图中编辑这些值,也可以在viewmodel中通过双向绑定编辑这些值。
但让我头疼的是如何在模型中更新这些数据。
由于我是通过反射创建层次结构viewmodel结构的,因此父级没有与字段名/索引器/对应的get/set属性。等效配置类/集合的。尽管每个viewmodel实例都知道父模型的数据结构的字段/属性名,并且也知道其父viewmodel实例(但不知道其父模型实例)。
每次试图通过命令或调用某个家长的更新函数来解决这个问题,我的大脑都会打一个结。
有没有一个简单的方法通过常规绑定技术来实现这一点?
如果我为正在使用的每个配置(子)类创建viewmodels会更好吗?
提示:每个viewmodel实例都知道其在父模型的数据结构中的字段/属性名。