将视图模型/模型绑定到实际数据模型

时间:2012-11-10 16:49:27

标签: wpf mvvm data-binding

我是MVVM和WPF的新手。我需要在WPF中做一些原型设计并达成概念性问题。

假设您有服务器向您发送数据。无论您当前是否显示它都需要将其存储在缓存中,这是您的“真实数据”,并且在某些时候您需要将其放在UI上(当用户打开特定屏幕时),这是您的viewmodel。< / p>

我的问题很明显 - 我应该将UI绑定到存储在某个服务中的真实数据,还是应该围绕该数据进行viewmodel包装并绑定到它? 在第一种情况下,我收到“调用线程无法访问此对象”异常,除非我使用Dispatcher,但在模型中调用Dispatcher看起来不正确

在后一种情况下,我需要:

  1. 将90%的数据从“真实模型”复制到包装器
  2. 手动监视基础“真实数据”中的更改,以更新视图模型,以防万一实现INotifyPropertyChanged。
  3. 正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

我更喜欢将数据缓存放在我称之为“服务层”(通过WCF或任何通信机制实际与服务器交互的客户端代码)中。

数据缓存实际上是几个List<T>,我不会在那里收听更改通知,因为实际上并不需要。

相反,您从ViewModel中使用这些“客户端服务”,并检索List<T>并将项目存储在ObservableCollection<T>的ViewModel中。这样,您可以从View到ViewModel进行双向绑定,而不需要View与存储在“服务层”中的“低级”数据缓存进行交互。

执行ViewModel操作时不需要使用Dispatcher,因此这是一种更好的可扩展方法,因为您可以执行检索数据所需的多线程。

答案 1 :(得分:1)

最合适的方式是让ViewModel与View的需求非常相似。这意味着如果您的View有一个列表,那么您很可能需要在ViewModel上至少有2个属性,一个用于ItemSource,另一个用于所选项目。

关于存储的真实数据,我会说,让它被您的服务访问。也许您使用WPF或Silverlight,因此您将保护您的真实物理数据。并且可以交换视图所需的适当信息。

我希望它有所帮助。如果您想分享项目的一些建筑方面,我们可能会给您更多建议。