设计时数据接口实现

时间:2016-06-21 06:02:28

标签: c# wpf mvvm design-time design-time-data

我有一个像这样的ViewModel类

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项目中创建一些IDock的Mock实现,或引用和使用Mocking框架。

在这种情况下获得设计时数据的最优雅方法是什么?

编辑:不确定它是否相关但我使用的是Visual Studio 2012。

1 个答案:

答案 0 :(得分: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}">