【发布时间】:2016-04-17 06:17:17
【问题描述】:
我有PersonViewModel、DepartmentViewModel 和他们的PersonView、DepartmentView。
PersonViewModel 有一个空的构造函数,但是DepartmentViewModel 有一个参数:
public class DepartmentViewModel
{
public DepartmentViewModel(ObservableCollection<Person> persons)
{}
}
我使用以下服务打开新窗口:
public interface IDialogService<T>
{
void Show(IUnityContainer unityContainer);
void ShowDialog(IUnityContainer unityContainer);
}
public class DialogService<T> : IDialogService<T> where T : Window
{
public void Show(IUnityContainer unityContainer)
{
var container = unityContainer;
container.Resolve<T>().Show();
}
public void ShowDialog(IUnityContainer unityContainer)
{
var container = unityContainer;
container.Resolve<T>().ShowDialog();
}
}
上面的服务真的很好用。到目前为止,在我想将参数发送到 DepartmentViewModel 之前,一切正常。
我的App.xaml.cs 拥有在OnStartup() 方法中实例化视图模型的所有内容:
protected override void OnStartup(StartupEventArgs e)
{
_container = new UnityContainer();
_container.RegisterType<IViewMainWindowViewModel, MainWindow>();
_container.RegisterType<IViewMainWindowViewModel, MainViewModel>();
_container.RegisterType<IViewPersonViewModel, PersonView>();
_container.RegisterType<IViewPersonViewModel, PersonViewModel>(new ContainerControlledLifetimeManager());
_container.RegisterType<IViewDepartmentViewModel, DepartmentView>();
_container.RegisterType<IViewDepartmentViewModel, DepartmentViewModel>(new ContainerControlledLifetimeManager());
//types
_container.RegisterType(typeof(IDialogService<>), typeof(DialogService<>));
_container.Resolve<MainWindow>().Show();
}
我的问题是当我从PersonViewModel 打开新窗口时如何向DepartmentViewModel 发送参数?
我的代码从PersonViewModel打开新窗口:
private readonly IDialogService<DepartmentView> _dialogDepartmentView;
public void ContinueCommand_DoWork(object obj)
{
//want to send "persons" to departmentViewModel
ObservableCollection<Person> persons = new ObservableCollection<Person>();
// Open new dialog
_dialogDepartmentView.ShowDialog(_unityContainer);
}
当我通过IDialogService打开新窗口时,如何将ObservableCollection<Person> persons发送到DepartmentViewModel?
【问题讨论】:
-
啊。
ServiceLocator代码中的反模式。话虽如此,您有多少个DepartmentViewModel实例?这是您应该采用哪种解决方案的决定因素。 -
@code4life 只是 DepartmentViewModel 的一个实例。反模式意味着不好?
-
老实说应该尽量不要使用它。
-
@code4life 但如何从 viewModel 打开新窗口?您能否提供一个链接以查看打开新窗口的正确方法。
-
@StepUp。有很多谷歌点击,stackoverflow 本身有很多 QA。他们中的许多人建议采用中介模式。其他人建议服务。其他、事件、命令等。我发现服务更自然。