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.
我有一个 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.