C# PRISM-为每个交互请求创建一个新的对话框实例-
我面临一个问题: 如果我对该对话框执行第一个请求并将其添加到Grid.Children…有时我必须在激活的对话框中调用另一个对话框,在这种情况下,传递的是同一个实例抛出该操作,并且应用程序尝试再次将同一个实例添加到Grid.Children…我得到一个异常 对于我在视图模型中执行的每个请求,我想创建一个新的“视图:DialogControl”实例,我如何才能完成它 遵循我的观点互动:C# PRISM-为每个交互请求创建一个新的对话框实例-,c#,wpf,prism,C#,Wpf,Prism,我面临一个问题: 如果我对该对话框执行第一个请求并将其添加到Grid.Children…有时我必须在激活的对话框中调用另一个对话框,在这种情况下,传递的是同一个实例抛出该操作,并且应用程序尝试再次将同一个实例添加到Grid.Children…我得到一个异常 对于我在视图模型中执行的每个请求,我想创建一个新的“视图:DialogControl”实例,我如何才能完成它 遵循我的观点互动: <i:Interaction.Triggers> <prism:Int
<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.Dialog
?如果您为每个显示对话框请求创建一个ContentControl
作为对话框元素,然后不传递DialogControl
的具体实例,而是将其建模为刚刚创建的ContentControl
的ContentTemplate
,则可以避免问题
这将使您的操作保持通用性,并为每个请求创建一个新实例。例如,MessageAction.DialogTemplate的类型可以是DataTemplate