У меня есть UserControl, где данные передаются через свойство зависимости. UserControl поддерживается моделью представления, и данные присваиваются свойству модели представления.
XAML привязывается к обоим свойствам в модели представления, а также к свойствам в переданных данных.
Проблема в том, что пользователь меняет данные, а затем привязывает данные к разрыву пользовательского интерфейса. Пользовательский интерфейс все еще привязан к исходному объекту данных.
Как я могу заставить привязку обновиться? INotifyPropertyChanged реализуется повсюду, но это не свойство, которое становится устаревшим, но является обязательным. В основном, как вы собираетесь заменить модель поддержки?
Поскольку я не уверен, что мое описание ясное, я попытаюсь описать его снова в псевдокоде.
<MyControl Source="{Binding Data}"/>
Где источник - свойство зависимостей MyControl. В PropertyChangedCallback эти данные передаются модели представления.
MyViewModel.Data = Source;
Внутри объекта MyControl XAML привязаны к этой модели.
{Binding Path=MyViewModel.Data.Item}
Если вам интересно, почему свойство зависимостей определено в UserControl, это потому, что оно является многоразовым элементом управления, и конечный пользователь не должен знать о модели представления.
"UserControl поддерживается моделью просмотра" и, таким образом, прерывает приложение.
Элемент UserControl DataContext должен быть моделью. Период. Если вам нужно выполнить логику пользовательского интерфейса, сделайте это в коде. Нужно что-то еще? Создайте DependencyProperties на поверхности вашего UserControl для их доставки.
Когда вы создаете ViewModel специально для вашего UserControl, вы нарушаете естественный поток DataContext (на данный момент, возможно, модель UC предназначена для работы) и привязки в UserControl. В большинстве случаев это бессмысленно и вредно для некоторых (как вы заметили).
Мой канонический ответ на эту тему содержит более подробную информацию.
Вы пытаетесь заменить DataContext пользовательского контроля во время сеанса приложения?
Если да, то я уверен, что это не сработает.
Вы рассматривали возможность создания нового экземпляра этого пользовательского элемента управления с помощью другого DataConext?