2016-05-23 2 views
0

Toutes les approches d'exposition de données au moment du design que j'ai vues sont comprises dans la création de deux ViewModels. Un pour Design-Time et le second pour l'exécution. Mais je me sens comme c'est idiot. Pourquoi voudrais-je dupliquer le code? Pourquoi ne puis-je pas compter sur le conteneur IoC si je l'utilise déjà dans l'application? Je veux juste composer mon IoC au moment du design au bon moment, avant que le WpfDesigner essaye de résoudre le ViewModel correspondant. Nous avons donc besoin d'une méthode d'initialisation au niveau de l'assemblage. J'ai trouvé this thread on stackoverflow.Prise en charge des données IoC et au moment du design dans WPF

Malheureusement, il semble que l'ajout du code suivant aux AssemblyInfo.cs ne fonctionne pas:

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

Je ne vois pas que ce code est jamais appelé.

Répondre

0

vous pouvez simplifier votre initialisation en fonction du mode en utilisant DesingerProperties

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     if(DesignerProperties.GetIsInDesignMode(this)) 
     { 
      DataContext = new ViewModelBase(); 
     } 
     else 
     { 
      DataContext = new ViewModelBase(param1, param2); 
     } 
     InitializeComponent(); 
    } 
}