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

时间:2013-04-16 16:45:24

标签: c# wpf prism

我遇到了问题:

如果我对对话框执行第一个请求并将其添加到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>

2 个答案:

答案 0 :(得分:0)

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

但是,如果您只是将新对话框填入父网格(例如禁用其他对话框等),则可能会遇到其他问题。最好将交互请求排入操作中。

答案 1 :(得分:0)

TypeMessageAction.Dialog的内容是什么?如果为每个节目对话框请求创建ContentControl作为对话框元素,然后将DialogControl模型的具体实例传递给ContentTemplate,则可以避免出现问题创建了ContentControl

这将使您的Action保持通用,并为每个请求创建一个新实例。例如,Type的{​​{1}}可以是MessageAction.DialogTemplate