gpt4 book ai didi

c# - WPF MVVM 更改模型

转载 作者:行者123 更新时间:2023-12-03 10:35:58 26 4
gpt4 key购买 nike

我有一个 UserControl,数据通过依赖属性传入。
UserControl 由 View 模型支持,并且数据被分配给 View 模型的属性。

XAML 绑定(bind)到 View 模型中的属性以及传入数据中的属性。

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

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

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

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

其中 source 是 MyControl 的依赖属性。在 PropertyChangedCallback 中,此数据被传递给 View 模型。
MyViewModel.Data = Source;

在 MyControl XAML 中,事物绑定(bind)到此模型。
{Binding Path=MyViewModel.Data.Item}

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

最佳答案

“用户控件由 View 模型支持”,从而破坏了应用程序。

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

当您专门为您的 UserControl 创建 ViewModel 时,您破坏了 DataContext(此时,可能是 UC 设计使用的模型)和 UserControl 内的绑定(bind)的自然流程。在大多数情况下它是没有意义的,并且在某些情况下是有害的(正如你已经注意到的)。

My canonical answer on the subject contains more details .

关于c# - WPF MVVM 更改模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com