WPF MVVM 更改模型

WPF MVVM Change Model

我有一个 UserControl,其中数据通过依赖项 属性 传入。 UserControl 由视图模型支持,数据分配给视图模型的 属性。

XAML 绑定到视图模型中的属性以及传入数据中的属性。

问题是如果用户更改了数据,那么与 UI 的数据绑定就会中断。 UI 仍然绑定到原始数​​据对象。

如何使绑定刷新? INotifyPropertyChanged 贯穿始终,但不是 属性 变得陈旧,而是绑定。基本上,您如何更换支持模型?

由于我不确定我的描述是否清楚我将尝试用伪代码再次描述它。

<MyControl Source="{Binding Data}"/>

其中 source 是 MyControl 的依赖项 属性。在 PropertyChangedCallback 中,此数据被传递给视图模型。

MyViewModel.Data = Source;

在 MyControl 中 XAML 事物绑定到此模型。

{Binding Path=MyViewModel.Data.Item}

如果您想知道为什么在 UserControl 中定义依赖项 属性,那是因为它是一个可重用控件,最终用户不应该知道视图模型。

您是否尝试在应用程序会话期间换出用户控件的 DataContext?

如果你是,那么我相信这不会奏效。

您是否考虑过使用另一个 DataConext 启动该用户控件的新实例?

"The UserControl is backed by a view model" 从而破坏了应用程序。

UserControl 的 DataContext 应该是模型。时期。如果您需要执行 UI 逻辑,请在代码隐藏中执行。需要别的东西吗?在 UserControl 表面创建 DependencyProperties 以提供它们。

当您专门为您的 UserControl 创建 ViewModel 时,您打破了 DataContext 的自然流(此时,可能是 UC 旨在使用的模型)和 UserControl 内的绑定。它在大多数情况下毫无意义,在某些情况下有害(正如您所注意到的)。

My canonical answer on the subject contains more details.