Wpf 实时应用程序的MVVM设计
问题很简单: 基本上,我的视图应该显示来自WCF服务的数据。数据以高频率异步更新,因此当服务器端的数据更改时,GUI应该相应地更新 视图显示了大量数据,因此基本上它绑定了ViewModel中公开的50/60字段 模型部分基本上是一个POCO对象,其中包含GUI中显示的50/60字段。是,ViewModel将向视图显示模型对象。(请注意,模型对象实现INotifyPropertyChanged,以便在特性值更改时通知视图。) 现在,我编写了一个与WCF服务交互的“DataService”层,它负责根据WCF服务返回的数据更新模型。当数据在服务器端更新时,出于性能原因,WCF服务仅将更改的字段集返回给客户端 因此,在DataService中有一个事件处理程序,它管理wcf服务更新,如下所示:Wpf 实时应用程序的MVVM设计,wpf,silverlight,mvvm,Wpf,Silverlight,Mvvm,问题很简单: 基本上,我的视图应该显示来自WCF服务的数据。数据以高频率异步更新,因此当服务器端的数据更改时,GUI应该相应地更新 视图显示了大量数据,因此基本上它绑定了ViewModel中公开的50/60字段 模型部分基本上是一个POCO对象,其中包含GUI中显示的50/60字段。是,ViewModel将向视图显示模型对象。(请注意,模型对象实现INotifyPropertyChanged,以便在特性值更改时通知视图。) 现在,我编写了一个与WCF服务交互的“DataService”层,它负责
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对象。确保您不使用自动映射器。这取决于你的问题。