我在单独的xaml文件(FirstView.xaml和SecondView.xaml)中有两个视图的应用程序。在默认模式下,应用程序从FirstView.xaml生成视图:
<Application x:Class="WpfDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfDemo"
StartupUri="View\FirstView.xaml">
<Application.Resources>
</Application.Resources>
我可以通过编辑行来切换到第二个视图:
StartupUri="View\SecondView.xaml"
这在编译时工作正常,但我想在运行时实现这一点。我使用以下内容创建了应用程序设置:
<applicationSettings>
<WpfDemo.Properties.Settings>
<setting name="View" serializeAs="String">
<value>FirstView</value>
</setting>
</WpfDemo.Properties.Settings>
</applicationSettings>
我可以用以下内容读取App.config文件的内容:
string view = Properties.Settings.Default.View.ToString();
我想在运行时根据view
变量切换视图。
答案 0 :(得分:3)
第一步:从StartupUri
删除App.xaml
。
第二步:在App.xaml的Code-Behind中执行以下操作
protected override void OnStartup(StartupEventArgs e) {
Uri dynamicUri = null;
string view = Properties.Settings.Default.View.ToString();
var result = Uri.TryCreate(view, UriKind.RelativeOrAbsolute, out dynamicUri);
if (!result) throw new ApplicationException("Invalid settings found.");
this.StartupUri = dynamicUri;
base.OnStartup(e);
}
注意强>
问题和答案都与MVVM无关。对于这样的行为,没有MVVM解决方案,因为一切都必须在我们进入DataBinding之前发生,否则