gpt4 book ai didi

c# - 如果模型未实现 INotifyPropertyChanged, View 模型如何从其底层模型传播更改通知?

转载 作者:太空狗 更新时间:2023-10-29 20:37:34 25 4
gpt4 key购买 nike

阅读 Josh Smiths article about MVVM他的 View 模型 CustomerViewModel 实现了 INotifyPropertyChanged 但没有实现底层的 Customer 类。

在那种情况下,我只能看到一种(可行的)方法来使更改通知起作用——只对 CustomerViewModel 而不是 Customer 进行更改。在那种情况下,我的程序的后端逻辑是否也应该只针对 ViewModels 工作?这看起来很奇怪,毕竟它们是 View 模型。

谁能稍微澄清一下?

谢谢!

澄清:

假设我有一个模型报价和一个报价列表。

public class Quote
{
public string Name { get; set; }
public decimal Value { get; set; }
}

public QuoteViewModel : INotifyPropertyChanged
{
private Quote quote;

public event EventHandler PropertyChanged;

public decimal Value
{
get { return quote.Value; }
set
{
quote.Value = value;
PropertyChanged("Value");
}
}
}

现在,如果 Quote 由于后台线程轮询 Web 服务而发生更改,UI 将不会收到通知,因为 Quote 没有实现 INotifyPropertyChanged,除非系统的所有部分都使用 ViewModel?

最佳答案

我猜测在他的示例中,他正在使用通知将对 View 的一个 部分的更改传播到 View 的其他 部分。由于不同的部分大概绑定(bind)到相同的 View 模型,这会起作用。

重新逻辑验证;无论如何,我可能不会将其基于更改事件;首先,因为这将是一个很多的均匀订阅(对比 UI,您只绑定(bind) UI 关心 的东西),其次,它可能太重要了,不能冒丢失的风险; p 如果模型没有在内部执行验证(随着更改发生),那么我将在提交之前显式运行验证逻辑,同时查看所有成员。这也避免了“短暂不一致”的问题,即您计划进行多项更改以导致有效模型,但如果您立即验证它要么真的很尴尬找到一个序列,可以让你做出你想要的改变,或者是完全不可能的。通过推迟验证,这种情况就会消失。

关于c# - 如果模型未实现 INotifyPropertyChanged, View 模型如何从其底层模型传播更改通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640886/

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