2014-02-09 57 views
0

我的申請是醫療診所,我選擇了一個病人,然後有幾個標籤可供選擇,患者信息,家族史等。我從MainView中的所有選項卡開始,但得出的結論是,由於屏幕的複雜性,每個選項卡都需要位於單獨的視圖中。使用複雜視圖處理TabControl的正確方法是什麼?

那麼我怎樣才能跨多個視圖共享患者信息?所有屏幕都以某種方式與Patient相關聯,並且我沿着MainViewModel託管所有數據的道路,但這似乎是一個糟糕的主意,因爲我在單獨的視圖上操作數據並需要將更新返回到MainViewModel。什麼是正確的做法,我在互聯網上搜索了幾天,看着不同的架構,幾乎沒有運氣找到任何類型的架構。

我做了什麼,所以每個ViewModel都可以訪問Patient數據,就是使用下面的代碼。

 <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}"> 

我結合的每種視圖模型的MainViewModel因爲每個視圖模型是病人信息的一個方面。很棒!

回答

1

程序的體系結構取決於不同的變量,並且沒有一個正確的答案,我可以給你。 不過,我可以提出一些方法來處理您的問題:

  1. 保持一個主視圖模型(這是你現在在做什麼)。爲每個視圖創建一個ViewModel並使用一個公共類(例如Service)在視圖模型之間共享患者信息。在這種情況下,服務可能會暴露一個事件,這可能會在患者信息發生變化時引發。

  2. 使用輕量級WPF基礎結構(如MVVM Light Toolkit)通過使用Messenger實例來共享患者信息的更改。 (如選項2,但使用免費的第三方基礎設施)

  3. 使用PRISM與DI。

如果你所有的視圖查看模型代碼駐留在同一個DLL,您可以考慮使用選項2或3 如果某些視圖查看模型駐留在不同的組件,你可以考慮使用選項4,介紹了EventAggregator的設計模式。

希望這能幫助你找到正確的道路。

相關問題