PRISM -为每个交互请求创建一个新的对话实例-

本文关键字:一个 对话 实例 创建 交互 请求 PRISM | 更新日期: 2023-09-27 18:09:25

我面临一个问题:

如果我对对话框执行第一个请求并将其添加到Grid.Children…有时我必须在这个激活的对话框中调用另一个对话框,在这种情况下,正在传递相同的实例抛出操作,并且应用程序试图再次将相同的实例添加到GRID子节点....我得到一个异常

每个请求我做在视图模型我想创建一个新的实例"views:DialogControl",我怎么能做到这一点?

跟随我的视图交互:

    <i:Interaction.Triggers>
        <prism:InteractionRequestTrigger SourceObject="{Binding Path=NotificationToDialog}">
            <views:MessageAction>
                <views:MessageAction.Dialog>
                    <views:DialogControl />
                </views:MessageAction.Dialog>
            </views:MessageAction>
        </prism:InteractionRequestTrigger>
    </i:Interaction.Triggers>

PRISM -为每个交互请求创建一个新的对话实例-

您可以传递一个工厂来创建对话框,而不是传递一个实例给对话框本身。例如,你实现一个MessageAction.DialogFactory属性,代替MessageAction.Dialog。然后在你的(修改的)MessageAction中,你可以在触发时从工厂创建一个新的对话框。

然而,如果你只是简单地将新对话框塞进父网格(例如禁用另一个对话框等),你可能会遇到额外的问题。在操作中对交互请求进行排队可能会更好。

TypeMessageAction.Dialog的什么?您可以避免您的问题,如果您为每个显示对话框请求创建一个ContentControl作为您的对话框元素,然后而不是传递DialogControl模型的具体实例,它是一个ContentTemplate为您刚刚创建的ContentControl

这将保持你的动作通用,并为每个请求创建一个新的实例。例如,MessageAction.DialogTemplateType可以是DataTemplate