gpt4 book ai didi

wpf - 模型更改时刷新 ViewModel 的所有属性的数据绑定(bind)的好方法

转载 作者:行者123 更新时间:2023-12-03 08:52:53 25 4
gpt4 key购买 nike

简洁版本

如果我更新我的 ViewModel 包装的模型对象,有什么好方法可以为我的 ViewModel 公开的所有模型属性触发属性更改通知?

详细版本

我正在开发一个遵循 MVVM 模式的 WPF 客户端,并尝试处理从服务到在我的 View 中显示的数据的传入更新。当客户端收到更新时,更新以我用作模型的 DTO 的形式出现。

如果此模型是对 View 中显示的现有模型的更新,我希望关联的 ViewModel 更新其数据绑定(bind)属性,以便 View 反射(reflect)更改。

让我用一个例子来说明。 考虑我的模型:

class FooModel
{
public int FooModelProperty { get; set; }
}

封装在 ViewModel 中:
class FooViewModel
{
private FooModel _model;

public FooModel Model
{
get { return _model; }
set
{
_model = value;
OnPropertyChanged("Model");
}
}

public int FooViewModelProperty
{
get { return Model.FooModelProperty; }
set
{
Model.FooModelProperty = value;
OnPropertyChanged("FooViewModelProperty");
}
}

问题:

当更新的模型到达时,我设置 ViewModel 的 Model 属性,如下所示:
instanceOfFooVM.Model = newModel;

这会导致 OnPropertyChanged("Model")开火,但不是 OnPropertyChanged("FooViewModelProperty") , 除非我从 Model 显式调用后者的二传手。所以一个 View 绑定(bind)到 FooViewModelProperty当我更改模型时,不会更新以显示该属性的新值。

明确调用 OnPropertyChanged对于每个暴露的 Model 属性显然不是一个理想的解决方案,也没有采用 newModel并遍历其属性以逐一更新 ViewModel 的属性。

对于更新整个模型并需要为其所有公开属性触发更改通知的问题,有什么更好的方法?

最佳答案

根据docs :

The PropertyChanged event can indicate all properties on the object have changed by using either null or String.Empty as the property name in the PropertyChangedEventArgs.

关于wpf - 模型更改时刷新 ViewModel 的所有属性的数据绑定(bind)的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651466/

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