我有PersonViewModel
,DepartmentViewModel
及其PersonView
,DepartmentView
。當打開新窗口時,通過IDialogService發送參數給ViewModel
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()
方法裏面的ViewModels:
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();
}
我的問題是我怎麼能發送參數DepartmentViewModel
當我從PersonViewModel
打開新窗口?
我的代碼從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);
}
我如何發送ObservableCollection<Person> persons
到DepartmentViewModel
當我通過IDialogService
打開新窗口?
Argh。 'ServiceLocator'反模式遍及你的代碼。這就是說,你有多少個'DepartmentViewModel'實例?這是您決定採用哪種方式解決問題的決定性因素。 – code4life
@ code4life只是DepartmentViewModel的一個實例。反模式意味着不好? – StepUp
應該儘量不要使用它,說實話。 – code4life