1

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

假设您有向您发送数据的服务器。无论您是否显示当前是否需要将其存储在缓存中,这都是您的“真实数据”,有时您需要将其放在 UI 上(当用户打开特定屏幕时),这就是您的视图模型。

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

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

  1. 将 90% 的数据从“真实模型”复制到包装器
  2. 手动观察底层“真实数据”的变化以更新视图模型,以防万一实现 INotifyPropertyChanged。

正确的方法是什么?

4

2 回答 2

1

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

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

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

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

于 2012-11-10T20:09:54.670 回答
1

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

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

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

于 2012-11-11T00:23:51.093 回答