WPF通知记录锁定到应用程序的其他实例

时间:2017-01-11 17:12:04

标签: wpf data-binding

我有一个场景,可以一起打开WPF应用程序的多个实例。如果某个特定实例使数据模型变脏,我会更新数据库,说明当前记录是脏的(我在数据库中有一个列,指示记录是否脏)。我想通知其他实例记录已被弄脏,不允许进一步更改。完成更改后,我会更新此列,说它不再脏。

如何以MVVM方式将更改通知实现到其他实例。

一种方法是保持静态变量isRecordLocked并检查set是否为false,然后允许修改。

1 个答案:

答案 0 :(得分:0)

此问题称为并发问题。您可以采用两种方法来处理并发问题 - 乐观锁定或悲观锁定。我建议你多阅读一下,以便更好地了解这个问题。我建议阅读的一篇文章是here

我解决这个问题的方法如下:

  1. 首先,向表中添加一列。这将存储每行的最后更新日期。我们称之为LastUpdatedDate。
  2. 当您的wpf应用加载数据时,所有这些数据都将包含该行的原始版本。用户进行更新并点击“保存”后,您可以查询LastUpdatedDate列的值是否与加载数据时的值相同,而不是在数据库中将标志设置为脏。如果是,您可以继续正常保存。如果不是,则必须以某种方式通知用户(通过抛出并发异常并在UI上处理它)并要求他们重新加载数据。
  3. 据我所知,保持静态变量的方法不会起作用。原因是如果它是一个多个应用程序实例,它们将位于单独的AppDomain中,并且无法在其外部进行通信。这样静态变量将特定于每个实例。但是,如果有多个客户端与单个服务器端通信,如果在服务器端创建静态变量,则该方法可行。