0
在Silverlight和PRISM中,通過在不同模塊中傳遞來自ViewModel的參數,在一個模塊中打開彈出子窗口的好方法是什麼?Silverlight 4和Prism中的彈出窗口
在Silverlight和PRISM中,通過在不同模塊中傳遞來自ViewModel的參數,在一個模塊中打開彈出子窗口的好方法是什麼?Silverlight 4和Prism中的彈出窗口
創建一個通用接口/類,這兩個模塊都稱爲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。
你可以發佈ChildWindowService的代碼嗎?我想我有你的其他觀點。 – Prazanna
@Prazanna爲子窗口添加代碼 – Agies