2012-01-17 69 views
3

顯示一個對話框窗口,我有兩個棱鏡模塊。 我想其中的一個註冊窗口,使用「顯示對話框」模式的另一個顯示該窗口。 如何做(如果可以做到)?棱鏡:通過兩個模塊

回答

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容器中,然後「讀取」並在第二個模塊上顯示。 – 2012-01-18 01:01:40

+0

您必須通過可以放置在「基礎設施」模塊中的接口「粘合」ModuleA和ModuleB。通過這種方式,ModuleB將能夠在不知道它的情況下從ModuleA導入窗口。 – katit 2012-01-18 01:31:22

+0

謝謝。它是否可以與Unity一起使用? – 2012-01-18 12:14:29