Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在使用MVVM设计模式的WPF应用程序中使用WCF服务作为模型_.net_Sql_Wpf_Wcf_Mvvm - Fatal编程技术网

.net 在使用MVVM设计模式的WPF应用程序中使用WCF服务作为模型

.net 在使用MVVM设计模式的WPF应用程序中使用WCF服务作为模型,.net,sql,wpf,wcf,mvvm,.net,Sql,Wpf,Wcf,Mvvm,在使用MVVM编写WPF应用程序时,我希望使用WCF服务,其中包含从应用程序数据库提供相关数据的方法 例如,如果我的系统有一个任务列表,它们将存储在SQL数据库中。我可以在Web服务上放置一个方法来检索数据库中的所有任务 我可以从ViewModel调用此方法,并将结果存储在 public List<Task> Tasks { get; set; } 公共列表任务{get;set;} 然后我将视图上的控件绑定到此属性 当Tasks属性更改时,我已经为视图准备好了更新的内容(我没有将

在使用MVVM编写WPF应用程序时,我希望使用WCF服务,其中包含从应用程序数据库提供相关数据的方法

例如,如果我的系统有一个任务列表,它们将存储在SQL数据库中。我可以在Web服务上放置一个方法来检索数据库中的所有任务

我可以从ViewModel调用此方法,并将结果存储在

public List<Task> Tasks { get; set; }
公共列表任务{get;set;}
然后我将视图上的控件绑定到此属性

当Tasks属性更改时,我已经为视图准备好了更新的内容(我没有将其放在上面以保持示例的简单性)

我的问题是,当其他人将新任务添加到数据库中时,如何更新ViewModel上的Tasks属性

我是否需要每隔x分钟轮询数据库以查找新任务(通过WCF服务上的方法)


或者,当任务被添加到数据库中时,我是否可以做一些事情来更新Tasks属性?

您需要执行某种轮询来实现这一点。对ViewModel中的数据所做的更改将直接更新(通过绑定),因为所有更改都发生在WPF应用程序的内存中。但是,对数据库的更改只有数据库知道


您可能希望向WCF服务添加一个方法,该方法采用
DateTime
,该方法将返回自给定时间以来添加的所有任务。然后,从ViewModel中调用该方法,调用频率应符合您的使用场景和预期的数据更新率。此时,添加的任何新闻任务都应该反映在您的视图中。

您可以使用。这允许您的WPF应用程序从WCF服务器订阅更新。当新数据可用时,服务器将调用WPF应用程序提供的WCF服务。然后可以使用新数据更新视图模型。如果您的WCF服务还控制数据库的存储,那么您只需在更改时捕获更改,并向您订阅的WPF客户端发送通知。

您可以根据应用程序使用。如果应用程序是简单的CRUD,那么它可能不值得,但如果您正在构建更复杂的域模型或寻求显著的可伸缩性,那么这可能值得研究。CQR基本上将命令与查询分开。在您的场景中,您可能将实际的ViewModels存储在DB中,客户机直接从那里获取它们,而无需通过WCF。您还可以让您的客户端订阅域事件,以使它们能够根据需要动态刷新