设计时数据接口实现
Design Time Data Interface Implementation
我有一个像这样的 ViewModel class
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 的 Mock 实现或引用和使用 Mocking 框架。
在这种情况下获得设计时数据的最优雅方法是什么?
编辑:不确定它是否相关,但我使用的是 Visual Studio 2012.
基本上,您创建的是存根,而不是设计时数据的模拟。存根不能注入任何依赖项。
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}">
我有一个像这样的 ViewModel class
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 的 Mock 实现或引用和使用 Mocking 框架。
在这种情况下获得设计时数据的最优雅方法是什么?
编辑:不确定它是否相关,但我使用的是 Visual Studio 2012.
基本上,您创建的是存根,而不是设计时数据的模拟。存根不能注入任何依赖项。
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}">