Только что посмотрел сессию 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 }; } } ... }
Исходные коды всех примеров показанных в видео, вы можете скачать здесь.