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>
您可以传递一个工厂来创建对话框,而不是传递一个实例给对话框本身。例如,你实现一个MessageAction.DialogFactory
属性,代替MessageAction.Dialog
。然后在你的(修改的)MessageAction
中,你可以在触发时从工厂创建一个新的对话框。
然而,如果你只是简单地将新对话框塞进父网格(例如禁用另一个对话框等),你可能会遇到额外的问题。在操作中对交互请求进行排队可能会更好。
Type
是MessageAction.Dialog
的什么?您可以避免您的问题,如果您为每个显示对话框请求创建一个ContentControl
作为您的对话框元素,然后而不是传递DialogControl
模型的具体实例,它是一个ContentTemplate
为您刚刚创建的ContentControl
。
这将保持你的动作通用,并为每个请求创建一个新的实例。例如,MessageAction.DialogTemplate
的Type
可以是DataTemplate
。