2016-06-21 4 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; } 
} 

같은 뷰 모델 클래스가 지금은 약간의 디자인 타임 데이터를 생성 할 수 있습니다. 내 유닛 테스트에서는 이것을하기 위해 조롱 프레임 워크 (Moq)를 사용하고 있습니다. 내 App 프로젝트에서 IData의 모의 구현을 만들거나 Mocking 프레임 워크를 참조하고 사용해야한다는 사실을 좋아하지 않는다.

그런 시나리오에서 디자인 타임 데이터를 얻는 가장 좋은 방법은 무엇입니까?

편집 : 그것은 관련성하지만 2012 년

답변

1

은 기본적으로 당신이 스텁, 설계 시간 데이터가 아닌 가짜를 만들 비주얼 스튜디오를 사용하고 확실하지합니다. 스텁에는 종속성을 주입 할 수 없습니다.

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에서 사용 :

<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

그래서 두 개의 새로운 클래스가'MyDesignViewModel'and 만들어 주위에 마법 방법은'MyData'in 내 응용 프로그램 프로젝트, 올바른 없다? – metacircle

+0

'MyDesignViewModel' 그냥'MyData'에 대한 당신의 기존 구현을 사용할 수 있습니다 (게시 된 코드에서 볼 수 없습니다. 인터페이스를 참조하십시오), 구현에 종속성이 필요하지 않은 경우 (이유가 없습니다. 그것은 모든 경우의 98 %에 있어야합니다). 다른 모든 것은 (ViewModel 실제 작업과 관련이없는 종속성 또는 밀접한 결합) 우려를 섞거나 시스템을 너무 많이 사용하지 못하게합니다 (즉, ViewModel을 매개 변수없는 생성자로 인스턴스화 할 수있게 됨). DesignViewModel은 UI 디자이너를위한 뷰 모델과 다른 어셈블리에 상주 할 수 있습니다. – Tseng