我是MVVM和WPF的新手。我需要在WPF中做一些原型设计并达成概念性问题。
假设您有服务器向您发送数据。无论您当前是否显示它都需要将其存储在缓存中,这是您的“真实数据”,并且在某些时候您需要将其放在UI上(当用户打开特定屏幕时),这是您的viewmodel。< / p>
我的问题很明显 - 我应该将UI绑定到存储在某个服务中的真实数据,还是应该围绕该数据进行viewmodel包装并绑定到它? 在第一种情况下,我收到“调用线程无法访问此对象”异常,除非我使用Dispatcher,但在模型中调用Dispatcher看起来不正确
在后一种情况下,我需要:
正确的方法是什么?
答案 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,因此您将保护您的真实物理数据。并且可以交换视图所需的适当信息。
我希望它有所帮助。如果您想分享项目的一些建筑方面,我们可能会给您更多建议。