我的申请是针对医疗诊所而我选择一名患者,然后有几个标签可供选择,患者信息,家族史等。我开始使用MainView中的所有选项卡,但由于屏幕的复杂性,我们得出的结论是每个选项卡都需要位于不同的视图上。
如何在多个视图中共享患者信息?所有屏幕都以某种方式与患者相关,我已经走了MainViewModel的道路,托管所有数据,但这似乎是一个坏主意,因为我在不同的视图上操作数据,需要将更新返回到MainViewModel。什么是正确的方法,我已经在互联网上搜索了几天看不同的架构,几乎没有运气找到任何类型的类似架构。
我所做的是让每个ViewModel都能访问患者数据,请使用下面的代码。
<TabControl Grid.Row="2" x:Name="TC">
<TabItem Header="Patient Info" IsEnabled="{Binding IsPatientSet}" DataContext="{Binding}">
<view:TabPatientView DataContext="{Binding ElementName=TC, Path=DataContext}" />
</TabItem>
<TabItem Header="Clinical Worksheet" IsEnabled="{Binding IsPatientSet}">
我将每个ViewModel绑定到MainViewModel,因为每个ViewModel只是Patient Info的一个方面。效果很棒!
答案 0 :(得分:1)
程序的架构取决于不同的变量,我无法给你一个正确的答案。 但是,我可以提出一些方法来解决您的问题:
保留一个Master ViewModel(这就是你现在正在做的事情)。为每个View创建一个ViewModel,并使用公共类(例如Service)在View模型之间共享患者信息。在这种情况下,服务还可以暴露在患者信息改变时可以引发的事件。
使用轻量级WPF基础架构(如MVVM Light Toolkit
)通过使用Messenger实例共享患者信息的更改。 (与选项2类似,但使用免费的第三方基础设施)
使用PRISM
与DI。
如果所有View-ViewModel代码都驻留在同一个DLL中,您可以考虑使用选项2或3。
如果某些View-ViewModel驻留在不同的程序集中,您可以考虑使用显示EventAggregator
设计模式的选项4。
希望这有助于您走上正确的道路。