2016-11-16 69 views
0

我正在學習不同的棱鏡功能,現在我卡在打開新窗口。 我的應用程序Shell具有主區域和明細區域。 殼牌的主區域具有DataGrid,其中的項目在單擊時顯示其在Detail區域中的屬性。 我需要的是一種通過雙擊主區域中的項目來創建窗口的新實例的方法。 每個新窗口都可以保持活動狀態,直到關閉它爲止,這樣我可以通過單擊主區域中的任何其他項目打開其他窗口。棱鏡Mvvm Mef交互性打開窗口新實例

在預MVVM棱柱時候,我可能會做這樣的事情:

ICollection<Window> MyWindows = new List<Window>(); 
    var wnd = MyWindows.SingleOrDefault(x => x.Name == id.ToString()); 
    if (wnd == null) 
    { 
     wnd = new MyWindow(this, id); 
     MyWindows.Add(wnd); 
    } 
    wnd.Show(); 

但是,這是一個沒有去從殼牌的視圖模型和棱鏡...

曾使用類似InteractionRequestTrigger從我的外殼xaml:

<prism:InteractionRequestTrigger SourceObject="{Binding CyberPopUpViewRequest, Mode=OneWay}"> 
    <prism:PopupWindowAction> 
     <prism:PopupWindowAction.WindowContent> 
      <views:CyberPopUpView /> 
     </prism:PopupWindowAction.WindowContent> 
    </prism:PopupWindowAction> 
</prism:InteractionRequestTrigger> 

但是,這使我只能創建單個窗口。

回答

3

但是,這是由殼牌視圖模型和棱鏡不走......

真,如果你在視圖模型直接把代碼。它的服務(這是注入的依賴,測試時可以用模擬來替代):但是,如果你把(隱藏已讀):這是完全沒問題

internal class WindowManager : IWindowManager 
{ 
    public void CreateWindow(string id) 
    { 
     Window wnd; 
     if (!_myWindows.TryGetValue(id, out wnd)) 
     { 
      wnd = new MyWindow(Application.Current.MainWindow, id); 
      _myWindows[ id ] = wnd; 
     } 
     wnd.Show(); 
    } 

    private Dictionary<string, Window> _myWindows = new Dictionary<string, Window>(); 
} 
+0

感謝,將檢查了這一點,因爲我沒想到的將窗口創建投入使用。是否有可能在新窗口的新佈局中定義新的棱鏡區域? – VladacusB

+0

我從來沒有嘗試過,但它可能工作,我想。 – Haukinger