2013-04-16 78 views
0

I'm面臨一個問題: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> 

回答

0

你可以通過一個工廠創建對話框,而不是一個實例對話框本身。即您執行MessageAction.DialogFactory屬性,而不是MessageAction.Dialog。 然後在您的(修改的)MessageAction中,您可以在觸發時從工廠創建一個新的對話框。

但是,如果您只是將新對話框填充到父網格中(例如,禁用其他對話框等),則可能會遇到其他問題。將交互請求排列在動作中可能會更好。

0

什麼TypeMessageAction.Dialog的?如果您爲每個顯示對話框請求創建ContentControl作爲對話框元素,然後將DialogControl模型的具體實例作爲ContentTemplate而不是將您創建的ContentControl傳遞給ContentTemplate,則可以避免出現問題。

這將使您的操作通用,併爲每個請求創建一個新的實例。例如,MessageAction.DialogTemplateType可以是DataTemplate

相關問題