2016-11-16 2 views
0

私はさまざまなプリズムの機能を学習していますが、今は新しいウィンドウを開いています。 私のアプリケーションのシェルには、マスター領域と詳細領域があります。 シェルのマスター領域には、詳細領域のプロパティを表示するアイテムが表示されたDataGridがあります。 私が必要とするのは、マスタ領域の項目をダブルクリックしてウィンドウの新しいインスタンスを作成する方法です。 新しいウィンドウはすべて閉じることができます。そのため、マスター領域の他のアイテムをクリックして他のウィンドウを開くことができます。前MVVMプリズム時代にプリズムMvvm Mefインタラクティブウィンドウを開く新しいインスタンス

は、私はおそらくのようなものだろう:

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(); 

をしかし、これはシェルのViewModelにし、プリズムから無行くではありません...

のようなものを使用していました私のシェルXAMLからInteractionRequestTrigger:

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

しかし、これは私が唯一の単一のウィンドウを作成することができます。

答えて

3

は、しかし、これはあなたがビューモデルに直接コードを入れたい場合は、

真...シェルのViewModelにし、プリズムから無行くではありません。 (つまり、依存関係として注入されていますし、テストするときにモックに置き換えることができます)サービスでそれを:あなたは(非表示読み込み):置けばしかし、それは完全に罰金です

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

関連する問題