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