我正在编写WPF应用程序,同时主要遵循MVVM设计模式。该应用程序具有分成不同类别的各种教育模块,以由用户完成。模块组织成分层菜单。我的ViewModel有一个名为MenuPageViewModel
的类,它公开了呈现MenuNode
所需的信息。当然,菜单树中的终端元素具有我想要向用户显示的内容。该内容可以是许多不同类型的模块之一。目前,当用户在菜单中选择一个模块时,我无法看到任何方法使用大条件块来确定我想要返回的ViewModel类型,以便根据MenuItem的Content属性的类型进行显示。例如......
if (CurrentlySelectedMenuItem.Content is Lesson)
return new LessonViewModel(CurrentlySelectedMenuItem.Content as Lesson);
if (CurrentlySelectedMenuItem.Content is SkillsCheck)
return new SkillsCheckViewModel(CurrentlySelectedMenuItem.Content as SkillsCheck);
有人能给我一个更优雅和可维护方法的暗示吗?现在,如果我添加一个新的模块类型,我必须记住更新这个条件块,这只会让我感到烦恼。
感谢。
答案 0 :(得分:0)
如果您使用的是Unity / Prism,那么使用容器来解析对象将是我的第一选择。
_container.Resolve(Type.GetType(strObjectType)) as BaseViewModel;
其中strObjectType是一个字符串,其中包含您要创建的类的类型(例如“LessionViewModel”)
如果您不使用Unity,那么反射就可以了
Activator.CreateInstance(strObjectType) as BaseViewModel;
使用这两种解决方案,您需要在menuItem上使用类类型的字符串。
第三个选择是拥有一个工厂,但它可能最终会在其中出现条件情况,或者包含我刚刚列出的代码。