我在决定将数据从 Web 服务获取到 UI 的最佳方法时遇到了一些麻烦。
鉴于 WebClient 的异步特性,您将如何构建它?
- 模型使用 WebClient 与 Webservice 对话
- ViewModel 向模型请求数据
- View 数据绑定到 ViewModel
在异步完成事件中,我需要将数据从模型返回到 ViewModel,这些是我考虑过的事情。
- 我可以在 ViewModel 订阅的模型中触发一个事件。
- 我也许可以通过传递回调来做一些事情?
- 或者我应该在 ViewModel 和 Model 之间执行第二级 INotifyPropertyChanged 事件?
- 或者我很困惑并且完全误解了MVVM?
这取决于您想要对 MVVM 有多纯粹。
您可以将 API 本身视为您的模型,在这种情况下,ViewModel 具有 WebClient,并且在异步完成时您可以设置属性(它们反过来会从其设置器中触发 PropertyChanged)。
或者您可以拥有一个包含 WebClient 代码的本地模型(听起来就像您拥有的那样)。在这种情况下,我个人的方法是从异步完成事件触发“ModelUpdated”事件。 (您的选择 1)。
您的 ViewModel 可以侦听此事件,并且可以触发PropertyChanged(null)
让视图询问所有属性,或触发多个 PropertyChanged 事件。请记住,您并不局限于从 setter 中触发 PropertyChanged。没有什么可以阻止你使用像这样的方法
private void FireMultipleProperties(){
NotifyPropertyChanged("Property1");
NotifyPropertyChanged("Property2");
NotifyPropertyChanged("Property3");
}
因此,您可以在模型完成填充时调用该方法,并且您的 UI 将在触发每个属性时调用更新它们。仅当您拥有大量属性并且不想一次将它们全部解雇时,您才需要执行此操作PropertyChanged(null)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)