2016-05-23 14 views
0

Alle Ansätze zur Entwurfszeit-Datenbelichtung, die ich gesehen habe, sind in der Erstellung von zwei ViewModels enthalten. Eine für Design-Time und die zweite für die Laufzeit.IoC- und Design-Time-Datenunterstützung in WPF

Aber ich fühle mich wie das ist albern. Warum sollte ich Code duplizieren? Warum kann ich mich nicht auf den IoC-Container verlassen, wenn ich ihn bereits in der Anwendung verwende?

Ich möchte nur meinen IoC in der Entwurfszeit zur richtigen Zeit verfassen, bevor der WpfDesigner versuchen wird, das entsprechende ViewModel aufzulösen.

Wir brauchen also eine Art der Initialisierung auf Baugruppenebene. Ich habe this thread on stackoverflow gefunden.

Leider scheint es, dass das Hinzufügen von dem folgenden Code in die AssemblyInfo.cs nicht funktioniert:

[assembly: DesignTimeBootstrapper] 
[AttributeUsage(AttributeTargets.Assembly)] 
class DesignTimeBootstrapperAttribute : Attribute { 
    public DesignTimeBootstrapperAttribute() { 
     File.AppendAllLines(@"F:\tmp\DesignTimeDebug.txt", new[] { "DesignTimeBootstrapperAttribute" }); 
     var dep = new DependencyObject(); 
     if (DesignerProperties.GetIsInDesignMode(dep)) { 
      Bootstrapper b = new Bootstrapper(); 
      b.Start(); 
     } 
    } 
} 

Ich sehe nicht, dass dieser Code immer genannt wird.

Antwort

0

Sie Ihre Initialisierung DesingerProperties

unter Verwendung
public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     if(DesignerProperties.GetIsInDesignMode(this)) 
     { 
      DataContext = new ViewModelBase(); 
     } 
     else 
     { 
      DataContext = new ViewModelBase(param1, param2); 
     } 
     InitializeComponent(); 
    } 
} 
basierend auf Modus vereinfachen