阅读Josh Smiths关于MVVM的文章,他的视图模型CustomerViewModel实现INotifyPropertyChanged但不是基础Customer类.
在这种情况下,我只能看到一种(可行的)方法来进行变更通知工作 - 只更改CustomerViewModel而不是更改Customer.在这种情况下,我的程序的后端逻辑是否也只是针对ViewModels?这看起来很奇怪,毕竟他们是View Models.
有人可以澄清这一点吗?
谢谢!
澄清:
假设我有一个模型报价和行情列表.
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果由于后台线程轮询Web服务而引用更改,则不会通知UI,因为除非系统的所有部分都使用ViewModel,否则引用不会实现INotifyPropertyChanged?
我猜测在他的示例中,他正在使用通知将对视图一部分的更改传播到视图的其他部分。由于不同的部分可能绑定到相同的视图模型,因此这是可行的。
重新逻辑验证;无论如何,我可能不会将其基于变更事件;首先,因为这将是很多均匀的订阅(对比 UI,你只绑定 UI关心的东西),其次,它可能太重要了,不能冒丢失的风险;p 如果模型没有在内部执行验证(当发生更改时) )然后我会在提交之前显式运行验证逻辑,同时查看成员。这也避免了“短暂不一致”的问题,即您计划进行多项更改以产生有效的模型,但如果您立即验证,那么要么很难找到允许您进行所需更改的序列,要么是完全不可能的。通过推迟验证,这种情况就会消失。
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |