这是我的WPF应用程序模型的简化版本:
Employee
+Name:string
Client
+Name:string
+PhoneNumber:string
Appointment
+Employee:Employee
+Client:Client
+DateAndTime:DateTime
我的应用程序有一些用TabControl组织的主页。每个TabItem都有一个关联的View和ViewModel。一页上有一个DataGrid,其中显示了所有约会以及一些特定的详细信息,例如客户的电话号码。一页一页,还有另一个显示所有客户端的DataGrid。这些数据网格绑定(bind)到不同的ViewModel,因为它们位于不同的页面上。我的ViewModels仅作为实现INotifyPropertyChange的Model的包装而实现。
并存在一个问题:如果用户在第二页上修改了客户的电话号码,则该页面的ViewModel会正确更新(并通过该页面更新模型),但是不会通知第一页的ViewModel发生了更改。当我返回首页时,在屏幕上与该客户端进行的任何约会都仍会显示旧电话号码,直到我执行某些操作会导致该ViewModel的更新为止。
我该如何解决?是否应在页面之间共享公共(public)ViewModel?进行更改时,模型是否应该以某种方式通知所有ViewModel(模型当前对ViewModels一无所知)?这是我的第一个MVVM项目,所以我不确定应该如何做。
为了使事情变得更复杂,在我的第一页上,我使用日历控件并使用其SelectedDate属性来确定要显示的约会。因此,该页面的ViewModel必须保留自己的缓存的约会列表,每当SelectedDate更改或添加或删除约会时,该列表就会更新。
感谢您对此的任何帮助。
最佳答案
您可能希望进行某种消息传递,通知和监听器等。有很多方法可以执行此操作,请查看MVVM Light,它具有一个内置方法,并且此贴子有其用法示例...
http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx
关于c# - 在ViewModels上发布更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8997508/