Я пишу пользовательский элемент управления WPF, который внутренне использует MVVM. Чтобы работать «из коробки», он создает собственную модель представления (эта часть не относится к вопросу).
Мой элемент управления предоставляет ряд свойств зависимостей. Вид хоста (кто бы ни использовал мой контроль) может устанавливать эти DP или связываться с ними. Некоторые из этих DP имеют соответствующие свойства модели представления.
Это то, чего я хочу достичь (см. Диаграмму): DP в представлении моего элемента управления связаны с соответствующими свойствами view-модели. Кроме того, представление хоста должно иметь возможность устанавливать или связывать эти DP также, как вы используете любой другой элемент управления.
Однако, как только представление хоста устанавливает или связывает значение DP, первоначальная привязка (внутренняя привязка к модели представления элемента управления) теряется. Это потому, что каждый DP может иметь только один набор привязок. Так что это не работает:
Одним из решений является сделать модель представления объектом DependencyObject и его свойствами DP. Таким образом, я мог бы привязать модель представления элемента управления к его виду, а не наоборот, эффективно перевернув левую стрелку. Однако по разным причинам я хочу, чтобы моя модель представления использовала простые свойства C # и INotifyPropertyChanged.
Есть какие-нибудь идеи о том, как представить свойства модели представления как свойства зависимых извне зависимостей?
Edit:
Чтобы уточнить требования: представление фактически не создает саму модель представления (я понимаю, что это нарушило бы разделение интересов); скорее, он использует локатор модели представления для этого. (Это очень модульное корпоративное приложение.) Я знаю, что это не типичный подход (см. Ответ Рэйчел). Однако, принимая описанную установку, есть ли способ достичь желаемого результата?