【发布时间】:2010-09-23 17:58:00
【问题描述】:
我有一个外壳,它看起来像工具栏并定义了我的主要区域(包装面板)。我需要做的是能够将小部件添加到外壳中,当单击小部件时,会打开一个新窗口(视图)。以下是我目前所拥有的:
我创建了一个向主区域添加视图的模块类:
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 需要 访问容器,以便 将视图添加到区域。我怎么样 应该去集装箱?
除了关于访问容器的具体问题之外,我将“小部件”添加到工具栏外壳并启动的总体策略如何 点击时的浏览量?当谈到 Prism 的 MVVM 时,我是否完全偏离了轨道?
谢谢大家。
【问题讨论】:
标签: wpf mvvm unity-container prism