Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在MVVM中处理多个窗口和对话框?_Wpf_Mvvm - Fatal编程技术网

Wpf 如何在MVVM中处理多个窗口和对话框?

Wpf 如何在MVVM中处理多个窗口和对话框?,wpf,mvvm,Wpf,Mvvm,是否有任何标准方法可以使用MVVM模式显示对话框窗口、打开和关闭它们以及从中检索数据 我看到了这一点: 我想用于显示特殊视图/视图模型的对话框 如何在MVVM中处理多个窗口和对话框?在MVVM中处理对话框时我会做什么: var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM); 对于这种情况,我见过的最好的解决方案是使用交互请求对象标题。对于打开对话框来说,它是最为M

是否有任何标准方法可以使用MVVM模式显示对话框窗口、打开和关闭它们以及从中检索数据

我看到了这一点:

我想用于显示特殊视图/视图模型的对话框

如何在MVVM中处理多个窗口和对话框?

在MVVM中处理对话框时我会做什么:

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

对于这种情况,我见过的最好的解决方案是使用交互请求对象标题。对于打开对话框来说,它是最为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();
        }
    });
视图:


Wpf PRISM是

我读了这个链接,但奇怪的是作者如此强调如何打开窗口。在我看来,这是最微不足道的任务!只需创建一个新实例并调用show方法。我个人觉得困难在于将任何数据从第二个窗口重定向回原始视图模型,是的。。。在没有代码隐藏的情况下关闭窗口。对于第一个问题,我将主视图模型的引用传递给子视图。对于第二个,我创建了一个事件处理程序,并在打开子窗口时订阅它。请参阅此使用IoC-IoC对于他的特定情况来说是过分的。非常感谢,但我不想使用组件。根据您的需要创建您自己的简单组件。此示例演示了一个原则,您可以将其用作示例。另外,PRISM是开源的,因此您只能将所需的类添加到项目中。非常感谢,但是如何为特殊viewmodel设置视图?请查看链接,数据模板是为特殊viewmodel显示正确视图的关键
<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>