2016-08-06 44 views
0

Ich habe Anwendung mit zwei Ansichten in einer separaten XAML-Dateien (FirstView.xaml und SecondView.xaml). Im Standardmodus erzeugt die Anwendung die Ansicht von FirstView.xaml:Mit MVVM, wie kann ich dynamisch generieren, indem ich App.config

<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> 

Ich bearbeite die Leitung zu der zweiten Ansicht wechseln:

StartupUri="View\SecondView.xaml" 

Dieses auf der Kompilierung funktioniert gut aber ich möchte das zur Laufzeit erreichen. Ich habe die Anwendungseinstellungen mit den folgenden Inhalten:

<applicationSettings> 
    <WpfDemo.Properties.Settings> 
     <setting name="View" serializeAs="String"> 
      <value>FirstView</value> 
     </setting> 
    </WpfDemo.Properties.Settings> 
</applicationSettings> 

ich den Inhalt der Datei App.config lesen kann mit:

string view = Properties.Settings.Default.View.ToString(); 

Ich mag die Ansicht wechseln entsprechend den view Variable zur Lauf Zeit.

+0

Warum möchten Sie das tun? Ich bin neugierig, weil mich selbstzerstörerisches Verhalten anzieht ... – Will

Antwort

3

Erster Schritt: Entfernen Sie die StartupUri von Ihrem App.xaml.

Zweiter Schritt: Im Code-Behind Ihrer App.xaml gehen Sie wie folgt

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); 
     } 

Hinweis

Die Frage und die Antwort beide haben nichts mit MVVM zu tun. Für solch ein Verhalten gibt es keine MVVM-Lösung, da alles passieren muss, bevor wir in DataBinding kommen, oder aber