gpt4 book ai didi

wpf - 实时应用程序的 MVVM 设计

转载 作者:行者123 更新时间:2023-12-04 21:37:30 25 4
gpt4 key购买 nike

问题很简单:基本上我的 View 应该显示来自 WCF 服务的数据。数据异步更新频率高,因此当服务器端数据发生变化时,GUI应该相应更新。

View 显示了大量数据,因此基本上它绑定(bind)了 ViewModel 中公开的 50/60 个字段。

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

现在,我编写了一个与 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 不能更改)。

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

提前致谢,强

最佳答案

你说“数据是高频异步更新的”

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

http://msdn.microsoft.com/tr-tr/library/system.windows.threading.dispatchertimer.aspx这是 SO 用户的回答 https://stackoverflow.com/a/15044392/413032关于它。

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

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

为了提供这个;

据我所知,您使用 binding,因此绑定(bind)具有模式和 updatesourcetrigger 选项,因此您可以显式更新源。

http://msdn.microsoft.com/en-us/library/cc278072(v=vs.95).aspx#updating_the_data_source http://msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger.aspx

希望能告诉你一个方法。

关于wpf - 实时应用程序的 MVVM 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15213542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com