Смешиваемость с d:DataContext. Что мне не хватает?
Мне кажется, что я до сих пор вижу много рекомендаций и советов, утверждающих, что подход, основанный на представлении, - это лучший способ добиться Blendability в вашем приложении. Однако с d:DataContext, d:DesignData и d:DesignInstance разве не легко решить проблему смешиваемости независимо от того, как ваши представления и модели представления связаны друг с другом?
С DesignInstance вы просто выбираете конкретный тип ViewModel, который будет использоваться в конструкторе, и это как если бы вы получили композицию, ориентированную на просмотр. Фактически, использование DesignInstance на самом деле позволяет лучше разделить проблемы, чем делать сальто назад в IsInDesignMode или создавать конструктор по умолчанию только для поддержки проектирования в вашей реальной модели представления - вы можете наследовать от своего типа модели представления или от общего типа интерфейса, чтобы создать простой "конструктор" viewmodel, и он полностью ограничен дизайнером. С DesignData вам даже не нужно этого делать: вы можете просто создать поддельную модель представления декларативно в XAML.
Правда, выполнение перечисленных выше действий сопряжено с небольшими первоначальными затратами, но на самом деле это более чистое разделение, чем то, что вы получите, смешав данные проектирования с вашей реальной моделью представления. Я что-то упускаю? Почему Blendability все еще так важна?
1 ответ
Если у вас есть данные макета для всего представления, то использование d:DataContext,d:DesignData и d:DesignInstance должно обеспечить смешиваемость.
Таким образом, ответ на ваш вопрос, короче говоря, не имеет значения, как вы используете представление во время выполнения (сначала просматривайте или модели просмотра сначала), вы все равно можете иметь смешиваемость. Если у вас есть некоторая логика или инициализация viewmodel в вашей версии времени выполнения, вы должны просто убедиться, что то же самое есть в вашем экземпляре времени разработки.
Многие люди пытаются найти способ, которым им не нужно дублировать работу, создав по существу две модели представления. Я согласен, что это дает лучшее разделение.