2011-08-25 48 views

回答

1

創建一個通用接口/類,這兩個模塊都稱爲IChildWindowService,在引導程序中註冊IChildWindowServe/ChildWindowService。

//Highly simplified version 
//Can be improved by window reuse, parameter options, stronger eventing 
public class ChildWindowService : IChildWindowService 
{ 
    public ChildWindowService(IServiceLocator container) 
    { 
     _container = container; 
    } 
    public void Show<TViewModel>(TViewModel viewModel = null, Action<TViewModel, bool?> callBack = null) where TViewModel is IViewModel 
    { 
     var viewName = typeof(TViewModel).Name.Replace("Model", string.Empty); 
     // In bootstrapper register all instances of IView or register each view one by one 
     var view = _container.GetInstance<IView>(viewName); 
     viewModel = viewModel ?? _container.GetInstance<TViewModel>(); 
     view.DataContext = viewModel; 
     var window = new ChildWindow(); 
     window.Content = view; 
     var handler = (s,e) => { window.Close(); } 
     viewModel.RequestClose += handler; 
     view.Closed += (s,e) => { viewModel.RequestClose -= handler; } 
     // In silverlight all windows show as Modal, if you are using a third party you can make a decision here 
     window.Show(); 
    } 
} 

創建一個共同CompositePresentationEvent,此事件從a點的參數傳遞到b點

public class OpenChildWindowWithParameters : CompositePresentationEvent<ParamEventArgs>{}

視圖模型在模塊A引發事件。 模塊B中的控制器註冊並響應事件。 模塊B中的控制器將子窗口服務作爲依賴關係。 當事件發生時,控制器將在模塊B中創建VM並將參數傳遞給它,從事件中,它也將使用服務來顯示一個ChildWindow。

+0

你可以發佈ChildWindowService的代碼嗎?我想我有你的其他觀點。 – Prazanna

+0

@Prazanna爲子窗口添加代碼 – Agies