簡體   English   中英

如何在視圖模型之間切換視圖?

[英]How can I switch views between viewmodels?

我的主窗口定義了應用程序的標記,對於這種特定情況,可以說我有一個包含2列的網格。
第一列將具有導航鏈接,第二列將顯示不同的視圖。
在mainwindow xaml中定義了2個視圖(和2個視圖模型):

<Window.Resources>       
   <DataTemplate DataType="{x:Type vm:Window1ViewModel}">
       <vw:Window1View/>
   </DataTemplate>
   <DataTemplate DataType="{x:Type vm:Window2ViewModel}">
       <vw:Window2View/>
   </DataTemplate>      
</Window.Resources>

在第二個顯示我得到的視圖的網格列中:

<ContentControl  Content="{Binding Path=ViewModel}" HorizontalAlignment="Left">                    
</ContentControl>

其中ViewModel是我要設置為要顯示的view(viewmodel)的屬性。

喜歡 :

ViewModel =新的Window1ViewModel();
(將mainwindowview的datacontext設置為MainWindowViewModel)

因此,在MainWindowViewModel的視圖之間切換是沒有問題的。

我的問題是如何在Window1ViewModel內切換到Window1ViewMode2?

各種ViewModel都不“了解”其他ViewModel。
只有MainWindowViewModel知道其他人...

我該如何解決? 也許我應該定義一個自定義事件(帶有參數),MainWindowViewModel將訂閱,其他視圖模型將觸發它,然后MainWindowViewModel將切換到所需的視圖?

您描述的解決方案是一種可能性。 我能想到的另一個方法是使用某種導航服務(靜態類或傳遞給所有視圖類的接口-Viewmodels)來完成這種工作。

如果您的MainWindowViewModel創建了所有其他窗口,我將堅持使用界面解決方案。 例如,您可以讓MainWindowVM實現這樣的接口,並在創建時將其注入所有child-vm中。 這與您的事件處理方法幾乎相同,但是除了提供子項和主要訂閱服務外,您還可以主要提供一些東西……恕我直言,更好的方法。

好吧,也許我理解您的意思了。 您希望該控制器實際上是modelview,它將必須與其他人交換的事實通知mainmodelview。

考慮到我們正在談論WPF,請在mainmodelview上創建DependecyProperty,然后從childview進行設置,這在后面的代碼中將觸發modelviews交換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM