У меня есть проект, использующий Autofac .Создается файл BootStrapper
, который вызывается при запуске приложения:
public class BootStrapper
{
public IContainer BootStrap()
{
var builder = new ContainerBuilder();
builder.RegisterType<FileDataServices>()
.As<IFileDataServices>().SingleInstance();
builder.RegisterType<ScrapDataServices>()
.As<IScrapDataServices>().SingleInstance();
builder.RegisterType<MessageDialogService>()
.As<IMessageDialogService>().SingleInstance();
builder.RegisterType<MainWindow>().AsSelf();
builder.RegisterType<MainViewModel>().AsSelf();
return builder.Build();
}
}
И класс вызывается из App.xaml.cs`
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootStrapper = new BootStrapper();
var container = bootStrapper.BootStrap();
var mainWindow = container.Resolve<MainWindow>();
mainWindow.Show();
}
}
Когда MainWindow
создан, конструктор создает экземпляр MainViewModel
, который я хочу использовать позже:
public partial class MainWindow : Window
{
private MainViewModel _viewModel;
public MainWindow(MainViewModel viewModel)
{
InitializeComponent();
_viewModel = viewModel;
DataContext = _viewModel;
}
}
В MainViewModel
создается UpdateWindow
с помощью простого MessageDialogService
:
var result = _messageDialogService.ShowUpdateWindow();
И MessageDialogService
само по себе:
public class MessageDialogService : IMessageDialogService
{
public MessageDialogResult ShowUpdateWindow()
{
return new UpdateWindow()
{
WindowStartupLocation = WindowStartupLocation.CenterOwner,
Owner = App.Current.MainWindow
}.ShowDialog().GetValueOrDefault()
? MessageDialogResult.Update //if DialogResult = true;
: MessageDialogResult.Cancel; //if DialogResult = false;
}
}
При создании мне нужно передать существующий экземпляр MainViewModel
в UpdateWindow
как DataContext
.И я не знаю как.Прямо сейчас мне удалось создать только новый экземпляр MainViewModel
при создании UpdateWindow
, но это не моя цель, потому что в этом окне у меня есть элементы управления, которые мне нужны, чтобы они были связаны с ViewModel, созданным MainWindow
.Есть ли способ или способ сделать это?
В настоящее время у меня есть только это:
public partial class UpdateWindow : Window
{
public UpdateWindow()
{
var bootStrapper = new BootStrapper();
var container = bootStrapper.BootStrap();
var vm = container.Resolve<MainViewModel>();
InitializeComponent();
DataContext = vm;
}
private void ButtonUpdate_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
}