У меня есть оболочка, которая выглядит как панель инструментов и определяет мою основную область (панель переноса).Что мне нужно сделать, так это уметь добавлять виджеты в оболочку, и при нажатии на виджет открывается новое окно (представление).Ниже приведено то, что у меня есть:
Я создал класс модуля, который добавляет представление в основной регион:
public class MyModule : IModule
{
protected IUnityContainer Container { get; private set; }
public MyModule(IUnityContainer container)
{
Container = container.CreateChildContainer();
}
public void Initialize()
{
var regionManager = Container.Resolve<IRegionManager>();
MyModuleView myModuleView = new MyModuleView();
regionManager.Regions["MainRegion"].Add(myModuleView);
}
}
Вот содержимое MyModuleView:
<Grid>
<Grid.DataContext>
<vm:MyModuleVM/>
</Grid.DataContext>
<Button Content="My Module" Foreground="White" FontWeight="Bold" Command="{Binding Path=LaunchCommand}">
</Button>
</Grid>
Модель представления, MyModuleVM:
class MyModuleVM : ObservableObject
{
protected IUnityContainer Container { get; private set; }
public MyModuleVM()
{
}
RelayCommand _launchCommand;
public ICommand LaunchCommand
{
get
{
if (_launchCommand == null)
{
_launchCommand = new RelayCommand(() => this.LaunchTestView(),
() => this.CanLaunchTestView());
}
return _launchCommand;
}
}
private void LaunchTestView()
{
TestView view = new TestView();
view.Title = "Test View";
var regionManager = Container.Resolve<IRegionManager>();
regionManager.Regions["MyWindowRegion"].Add(view);
}
private bool CanLaunchTestView()
{
return true;
}
}
Итак, мой план был следующим:
Создайте класс, который реализует IModule (MyModule), и загрузите егопредставление (MyModuleView) в оболочке при инициализации
Создайте модель представления для модуля (MyModuleVM) и установите ее как DataContext представления, отображаемого в оболочке
MyModuleVM содержит команду, с которой связывается кнопка в MyModuleView.Когда кнопка нажата, команда запускается
Теперь вот где я застрял.Используя WindowRegionAdapter (адаптер, который помогает создавать представления в отдельных окнах), я хотел создать и отобразить новое представление.Как видно из MyModuleVM, LaunchTestView необходим доступ к контейнеру, чтобы добавить представление в регион.Как мне добраться до контейнера?
Помимо моего конкретного вопроса о доступе к контейнеру, какова моя общая стратегия добавления «виджетов» в оболочку панели инструментов и запуска представлений, когда онинажали?Я совершенно не в курсе, когда дело доходит до MVVM с Prism?
Спасибо, ребята.