我正在开发桌面应用程序的导航部分,并且遇到了一些问题。要求导航应该是动态的,以便您可以例如切换视图的顺序而无需重新编译(理想情况下也可以添加视图而无需重新编译)。
目前我正在使用 XML 来定义要显示的窗口、它应该具有的页眉以及页脚的外观。下面是 XML 现在的样子:
<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfViewState xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ViewState ViewName="WelcomeView" Header="Welcome to the Application" FooterButton1="Quit" FooterButton2="Back" FooterButton3="Next" />
<ViewState ViewName="LicenseView" Header="Licence Agreement" FooterButton1="Quit" FooterButton2="Back" FooterButton3="Next" />
<ViewState ViewName="LoginView" Header="Log in" FooterButton1="Quit" FooterButton2="Back" FooterButton3="Next" />
<ViewState ViewName="InstallationView" Header="Installing..." FooterButton1="Cancel" FooterButton2="None" FooterButton3="Next" />
<ViewState ViewName="UpdateView" Header="Updating..." FooterButton1="Cancel" FooterButton2="None" FooterButton3="Next" />
<ViewState ViewName="FinishedView" Header="Finished!" FooterButton1="None" FooterButton2="None" FooterButton3="Finish" />
</ArrayOfViewState>
当我在代码中匹配它时,它看起来像这样(viewState.View 是 UserControl 类型):
...
case "WelcomeView":
viewState.View = new WelcomeView();
...
如您所见,我使用 XML 中的 ViewName 属性来匹配和创建我的视图(它们也有一个 ViewModel,但这是通过 XAML 和 MVVM Light ViewModel Locator 处理的)。
该解决方案在技术上允许在不重新编译的情况下稍微更改导航(例如,您可以随意调整顺序),但必须有比匹配字符串属性更好的方法来处理此问题。我已经尝试研究序列化用户控件,以便我可以将它与其他属性一起加载,但到目前为止我还没有运气。关于如何进行和改进/改变这一点的任何想法?
谢谢!