2016-06-21 6 views
0

私はこのデザイン時データインタフェースの実装

public class MyViewModel : ViewModelBase 
{ 
    public MyViewModel() 
    { 
     if (!IsInDesignMode) 
     { 
      throw new InvalidOperationException(); 
     } 
    } 

    public MyViewModel(IDataProvider dataProvider) 
    { 
     Data = new ObservableCollection<IData>(dataProvider.GetData()); 
    } 

    public ObservableCollection<IData> Data { get; private set; } 
} 

のようなのViewModelクラスを持っている今、私はいくつかのデザイン時データを作成したいです。私の単体テストでは、これを行うためにモックフレームワーク(Moq)を使用しています。私は、AppプロジェクトでIDataのMock実装を作成するか、Mockingフレームワークを参照して使用する必要があるという事実は気に入らない。

このようなシナリオでデザインタイムデータを達成する最もエレガントな方法は何ですか?

編集:それが関連しているが、私は2012年

答えて

1

は基本的にあなたがスタブ、設計時のデータのないモックを作成するVisual Studioを使用していますわからない場合。スタブには依存関係を注入することはできません。だから、正しい二つの新しいクラスの `` MyDesignViewModel`and MyData`in私のアプリケーションのプロジェクトを作成、周りの魔法の方法はありません

<UserControl x:Class="MyView" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=vm:MyDesignViewModel, IsDesignTimeCreatable=True}"> 
+0

public class MyDesignViewModel : ViewModelBase { public MyViewModel() { Data = new ObservableCollection<IData>(new List<IData>() { new MyData() { Value1 = 1, Value2 = "Test" }, ... }); } public ObservableCollection<IData> Data { get; private set; } } 

次に、このようにXAMLでそれを使うのか? – metacircle

+0

'MyDesignViewModel'の' MyDesignViewModel'は、既存の実装を使用することができます(実装されたコードから見ることはできません)。すべての症例の98%にあるはずです)。他のすべては、懸念(ViewModelの実際のタスクに関係しない依存関係またはタイトな結合)またはシステムの過剰な緩和(ViewModelをパラメータのないコンストラクタでインスタンス化できるようにする)によって混ざり合います。あなたのDesignViewModelは、あなたのUIデザイナーだけのあなたのビューモデルとは別のアセンブリに存在することができます – Tseng

関連する問題