我有三个项目 - " Bootstrapper"," ApplicationView"和"演示"。
在我的viewmodel中,我想撤销一个窗口。但是我应该在哪里创建一个窗口的对象?我读过一篇文章,我应该在App.xaml.cs文件中创建所有类的实例。但是如何从viewModel在App.xaml.cs中调用此对象?我无法在ViewModel类中创建对象,因为我无法添加" BootStrapper"到"演讲"因为VS 2010会抛出错误 - "添加此项目作为参考将导致循环依赖"。
" Bootstrapper"的App.xaml.cs项目:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ComposeObjects();
Application.Current.MainWindow.Title = "Loose Coupling - People Viewer";
Application.Current.MainWindow.Show();
}
private static void ComposeObjects()
{
//MainWindow
var repository = new ServiceRepository();
var viewModel = new PeopleViewerViewModel(repository);
Application.Current.MainWindow = new MainWindow(viewModel);
//SuperWindow
var salut = new ServiceSalutation();
var salutViewModel = new SuperWindowViewModel(salut);
var NewForm = new SuperWindow(salutViewModel);
}
MainWindowViewModel.cs" Presentation"项目:
void NewForm(object parameter)
{
//New Window
/*/var salut = new ServiceSalutation();
//var salutViewModel = new SuperWindowViewModel(salut);*/
//var NewForm = new SuperWindow();
How can I revoke a SuperWindow.xaml from a project "ApplicationView"?
}
如何调用"演示文稿"的SuperWindow.xaml来自Presentation项目的MainWindowViewModel.cs的项目?我无法添加" BootStrapper"到"演讲"因为VS 2010会抛出错误 - "添加此项目作为参考将导致循环依赖"。
答案 0 :(得分:1)
我真的不完全理解我们的问题,但我假设你正在尝试构建然后从你的viewmodel弹出一个窗口。这可能是一个答案。在ViewModel中放置一个action或func委托来执行您需要的外部操作。你可以将它传递给你的viewmodel的构造函数,也许就像这样。
Action newFormAction = () => {
var salut = new ServiceSalutation();
var salutViewModel = new SuperWindowViewModel(salut);
var newForm = new SuperWindow(salutViewModel);
newForm.Show();
};
var viewModel = new PeopleViewerViewModel(repository, newFormAction);
然后在您的viewmodel中,您可以调用操作来创建弹出窗口,而无需引用表示层