Реализация интерфейса данных времени разработки
У меня есть класс 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). Мне не нравится тот факт, что мне нужно создать некоторую Mock-реализацию IData в моем проекте App или ссылаться и использовать Mocking Framework.
Каков наиболее элегантный способ достижения данных времени проектирования в таком сценарии?
Изменить: Не уверен, если это актуально, но я использую Visual Studio 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}">