我有一个看起来像工具栏的shell,并定义了我的主要区域(一个包裹面板)。我需要做的是能够向shell添加小部件,当单击小部件时,会打开一个新窗口(视图)。以下是我到目前为止:
我创建了一个模块类,它将视图添加到主区域:
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)进入shell 初始化时
为模块创建视图模型 (MyModuleVM)并将其设置为 显示的视图的DataContext shell
MyModuleVM包含一个命令a MyModuleView中的按钮绑定到。 单击按钮时 命令被触发
现在,这就是我被困的地方。运用 一个WindowRegionAdapter(一个适配器 这有助于创建视图 单独的窗口)我想创建 并显示一个新视图。如图所示 MyModuleVM,LaunchTestView需要 访问容器以便 将视图添加到区域。我怎么样 应该去集装箱吗?
除了我关于访问容器的具体问题之外,我的整体策略是如何将“小部件”添加到工具栏shell并启动 单击它们时的视图?当涉及带有Prism的MVVM时,我是否在这里完全偏离轨道?
谢谢你们。
答案 0 :(得分:1)
您可以通过constructor或property injection注册容器。为此,ViewModel实例必须是容器resolved,或者BuildUp方法在实例化后应该调用。
我希望这会有所帮助。
谢谢, 达米安