Только что посмотрел сессию Deep Dive MVVM с прошедшей недавно конференции MIX11. Посмотрите видео. Гарантирую, что не пожалеете потраченного времени.
Я же сейчас хочу остановиться только на одном моменте. Когда-то я уже писал про то как можно организовать Blendability для ваших View. А вот из сегодняшнего видео узнал, что оказывается в WPF4 есть возможность организовать все несколько проще.
Я напомню, что я предлагал создавать отдельный класс ViewModel’и для design time. Привязка такой ViewModel’и ко View выглядела вот так:
<UserControl
x:Class="ViewModelLocatorSample.EditTagView"
...
d:DataContext="{Binding Source={StaticResource editVm}}">
<UserControl.Resources>
<vm:EditTagViewModelDesign x:Key="editVm" />
</UserControl.Resources>
...
</UserControl>
Однако вот как можно сделать тоже самое проще:
<UserControl
x:Class="ViewModelLocatorSample.EditTagView"
...
d:DataContext="{d:DesignInstance Type=vm:EditTagViewModel,
IsDesignTimeCreatable=True}">
Дизайнер сам создаст экземпляр ViewModel’и подтянет из нее данные. Тут есть только один маленький нюанс. Теперь наша единственная ViewModel’ь должна иметь конструктор без параметров (иначе дизайнер не сможет ее создать) и уметь инициализировать себя данными-заглушками. Примерно следующим образом:
internal sealed class EditTagViewModel
{
public EditTagViewModel()
{
if (IsInDesignMode)
{
Tag = new TagInfo
{
Name = "DummyTag",
Score = 99
};
}
}
...
}
Исходные коды всех примеров показанных в видео, вы можете скачать здесь.