2013-03-17 64 views
1

使用MVVM模式,是否有任何標準方法顯示對話框窗口,打開和關閉它們以及從中檢索數據?如何在MVVM中處理多個窗口和對話框?

我已經看到了這一點:http://www.daedtech.com/mvvm-and-dialogs

我想使用的顯示一個對話框,特殊(查看/視圖模型)。

如何處理MVVM中的多個窗口和對話框?

+0

我讀的鏈接,但發現它奇怪的是,作者是把這麼重視如何打開一個窗口。在我看來,這是最瑣碎的任務!所有人都需要創建一個新實例並調用show方法。我個人覺得困難在於將第二個窗口中的任何數據重定向回原始視圖模型,並且是......關閉窗口而不使用代碼。第一個問題是,我將主視圖模型的參考傳遞給孩子。第二,我創建一個事件處理程序並在打開子窗口時訂閱它。 – failedprogramming 2013-03-17 07:13:38

+0

請參考此使用IoC - http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern – 2013-03-17 07:33:23

+0

Ioc是他的具體情況矯枉過正。 – David 2013-03-17 11:20:03

回答

0

thats在MVVM與對話工作時:)

var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM); 
+0

非常感謝,但是如何爲特殊的viewmodel設置視圖? – Niloo 2013-03-18 05:53:26

+0

看看鏈接,DataTemplates是爲您的特殊視圖模型顯示正確視圖的關鍵 – blindmeis 2013-03-18 07:06:01

+0

非常感謝:) – Niloo 2013-03-18 08:16:35

0

對於我見過這種情況,最好的解決辦法是PRISM's Interaction Request我做什麼(請參閱「使用交互請求對象」稱號)。這是用於打開對話框的最有MVVM友好的抽象。交互請求是視圖模型,與控件和視圖元素分開,並且可以綁定到特定的視圖。

樣品。 視圖模型:

public IInteractionRequest ConfirmCancelInteractionRequest 
{ 
    get 
    { 
     return this.confirmCancelInteractionRequest; 
    } 
} 

this.confirmCancelInteractionRequest.Raise(
    new Confirmation("Are you sure you wish to cancel?"), 
    confirmation => 
    { 
     if (confirmation.Confirmed) 
     { 
      this.NavigateToQuestionnaireList(); 
     } 
    }); 

查看:

<i:Interaction.Triggers> 
    <prism:InteractionRequestTrigger 
      SourceObject="{Binding ConfirmCancelInteractionRequest}"> 

     <prism:PopupChildWindowAction 
        ContentTemplate="{StaticResource ConfirmWindowTemplate}"/> 

    </prism:InteractionRequestTrigger> 
</i:Interaction.Triggers> 

<UserControl.Resources> 
    <DataTemplate x:Key="ConfirmWindowTemplate"> 
     <Grid MinWidth="250" MinHeight="100"> 
      <TextBlock TextWrapping="Wrap" Grid.Row="0" Text="{Binding}"/> 
     </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

WPF PRISM是here

+0

非常感謝,但我不想使用組件。 – Niloo 2013-03-18 04:53:29

+0

根據您的需求創建您自己的簡單組件。本示例演示了一個原理,您可以將其用作示例。 PRISM也是開源的,所以你可以只添加需要的類到你的項目中。 – 2013-03-18 08:11:02