2016-05-23 48 views
0

創建兩個ViewModels包含了我所見過的所有設計時暴露數據的方法。一個用於設計時,另一個用於運行時。WPF中的IoC和設計時數據支持

但我覺得這很愚蠢。爲什麼我想要複製代碼?如果我已經在應用程序中使用它,爲什麼我不能依賴IoC容器?

我只是想在合適的時間在設計時編寫IoC,然後WpfDesigner會嘗試解析相應的ViewModel。

所以我們需要一些彙編級的初始化方法。 我找到了this thread on stackoverflow

不幸的是,它似乎將以下代碼添加到AssemblyInfo.cs中不起作用:

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

我沒有看到這個代碼是以往任何時候都調用。

回答

0

您可以通過使用DesingerProperties

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     if(DesignerProperties.GetIsInDesignMode(this)) 
     { 
      DataContext = new ViewModelBase(); 
     } 
     else 
     { 
      DataContext = new ViewModelBase(param1, param2); 
     } 
     InitializeComponent(); 
    } 
} 
簡化基於模式的初始化