2012-01-17 15 views

答えて

1

よく。私はthis tipに従って解決したと思う。しかし、それが最良の解決策であるかどうかはわかりません。

私はちょうど私のシェルプロジェクトでウィンドウを作成しました。このウィンドウは、ダイアログウィンドウとしてポップアップされます。

Popup.xaml:ここ

はそのコードです

<Window x:Class="TryERP2.Shell.Views.Popup" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Popup" Height="315" Width="411" 
     xmlns:prism="http://www.codeplex.com/prism"> 
    <Grid> 
     <ContentControl x:Name="DialogRegion" Grid.Row="1" prism:RegionManager.RegionName="DialogRegion" /> 
    </Grid> 
</Window> 

Popup.xaml.cs:

public partial class Popup : Window 
{ 
    private static Popup popup; 

    private Popup(IRegionManager regionManager) 
    { 
     InitializeComponent(); 
     RegionManager.SetRegionManager(this, regionManager); 
    } 

    //Using the singleton pattern 
    public static Popup getPopup(IRegionManager regionManager) 
    { 
     if (popup == null) 
      popup = new Popup(regionManager); 
     return popup; 
    } 
} 

そして、最後に、私は(ダイアログを表示したいですモジュール内のコマンド)、私はそれをインスタンス化し、RegionManagerが何であるかを知らせます:

private void showDialog() 
{ 
    // Acquiring the RegionManager 
    var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 

    // Getting the Popup object 
    Popup p = Popup.getPopup(regionManager); 

    // Looking for the view I want to show in the dialog 
    var x = new Uri("MyView", UriKind.Relative); 

    // Changing the view of the DialogRegion (which is within the Popup) 
    regionManager.RequestNavigate("DialogRegion", x); 

    // Showing the dialog 
    p.ShowDialog(); 
} 
1

はい、できます。これは大まかな手順です:あなたの「インフラストラクチャ」プロジェクトでは、このビューの

宣言インタフェース

public interface IMyDialogWindow 
{ 
} 
あなたのモジュール

[Export(typeof(IMyDialogWindow))] 
public class MyClassInModuleA : IMyDialogWindow 
{ 
} 

[インポート]このクラスでは、このインタフェースを実装

[エクスポート]クラス他のモジュールでそれを使用してダイアログに使用する

[Import] 
public IMyDialogWindow PropertyInModuleB 
+0

サンプルコードを投稿できますか?私はあなたの答えを完全に理解できませんでした。私は他のプロジェクトのファイルを複製する必要がありますか?私は最初のモジュールのIoCコンテナにビューを登録し、それを第2のモジュールに表示して表示する方法で考えていました。 –

+0

「インフラストラクチャー」モジュールに配置できるインターフェースを介してModuleAとModuleBを「接着」する必要があります。これにより、ModuleBはModuleAからウィンドウをインポートすることができます。 – katit

+0

ありがとう。それはUnityと一緒に使えますか? –

関連する問題