Wpf 实时应用程序的MVVM设计

Wpf 实时应用程序的MVVM设计,wpf,silverlight,mvvm,Wpf,Silverlight,Mvvm,问题很简单: 基本上,我的视图应该显示来自WCF服务的数据。数据以高频率异步更新,因此当服务器端的数据更改时,GUI应该相应地更新 视图显示了大量数据,因此基本上它绑定了ViewModel中公开的50/60字段 模型部分基本上是一个POCO对象,其中包含GUI中显示的50/60字段。是,ViewModel将向视图显示模型对象。(请注意,模型对象实现INotifyPropertyChanged,以便在特性值更改时通知视图。) 现在,我编写了一个与WCF服务交互的“DataService”层,它负责

问题很简单: 基本上,我的视图应该显示来自WCF服务的数据。数据以高频率异步更新,因此当服务器端的数据更改时,GUI应该相应地更新

视图显示了大量数据,因此基本上它绑定了ViewModel中公开的50/60字段

模型部分基本上是一个POCO对象,其中包含GUI中显示的50/60字段。是,ViewModel将向视图显示模型对象。(请注意,模型对象实现INotifyPropertyChanged,以便在特性值更改时通知视图。)

现在,我编写了一个与WCF服务交互的“DataService”层,它负责根据WCF服务返回的数据更新模型。当数据在服务器端更新时,出于性能原因,WCF服务仅将更改的字段集返回给客户端

因此,在DataService中有一个事件处理程序,它管理wcf服务更新,如下所示:

void OnServiceUpdated(UpdateArgs args)
{
  foreach(Field field in args.ChangedFields)
  {
      if(field.Key == "BetName") _modelBet.BetName = field.Value;
      else if(field.Key == "BetUser") _modelBet.BetUser = field.Value;
      [...]
      //the same for 50 fields...
  }
}
现在需要这个更新模型的可怕代码,因为我们只想更新服务器端未更改的模型字段。(请注意,不能更改wcf服务API)

我的问题是:为了提高“OnServiceUpdate”处理程序的性能,您有什么建议

提前感谢,, Jhon

您说“数据以高频率异步更新”

据我所知,您不希望频繁影响UI。因此,对于延迟通知,您可以使用调度程序计时器。它在UI线程上工作,与其他计时器不同

以下是SO用户对此的回答

如果您使用MVVM,那么如果我是您,我会使args.ChangedFields名称和我的ViewModel属性名称相等。因此,通过反射或使用自动映射器我可以将属性值传输到viewModel属性

您还可以在所有属性设置后引发事件并更新UI

提供这项服务

据我所知,您使用的是绑定,因此绑定具有模式和更新资源触发器选项,因此您可以显式更新


希望能给你指路。

嗨,达维特,非常感谢你的回答。好的,谢谢你推荐Dispatcher计时器,但是在这种情况下,UI上的频繁更新不是问题。嗨,Davut,非常感谢你的回答。好的,谢谢您建议使用Dispatcher计时器,但是在这种情况下,UI上的频繁更新不是问题。顺便说一句,我会单独处理这个问题。是的,我已经考虑过您提出的解决方案,因此通过使用反射来将属性值转换为viewModel属性,但出于性能原因,我希望避免使用反射。你关于自动制图器的建议很有趣。我会试着从那个方向调查。谢谢,约翰有些人说这种方法比反射更快。此外,我认为反思不会引起问题。绑定在1秒(渲染时间1.2sn)以内的控件绑定中使用反射和1000 Textblock对象。确保您不使用自动映射器。这取决于你的问题。