查看不在区域中显示

时间:2011-08-06 05:15:39

标签: c# .net mvvm c#-3.0 prism

我对下面的方案有两个问题:为什么区域最初没有添加到区域集合中?

为什么视图不在区域中显示......或者我该如何排除故障?

问题在于:在Prism for WPF中,我有一个像弹出窗口一样的窗口。此窗口具有使用region属性的用户控件。出于某种原因,该窗口的区域没有出现在区域集合中。

要将窗口的区域放入区域集合中,我是通过代码完成的。在触发此窗口外观的模块中,我执行:

IRegion region = new SingleActiveRegion();
myRegionManager.Regions.Add("MainWindowRegion", region);
myContainer.Resolve<someViewModel>().Initialize();
SomeView someView = myContainer.Resolve<SomeView>();
SomeViewModel someViewModel = myContainer.Resolve<SomeViewModel>();
someView.DataContext = someViewModel;
myRegionManager.Regions["MainWindowRegion"].add(someView, "SomeView");

该区域现在出现在区域集合中,以及我的所有其他区域。但是,someView永远不会在该区域中显示。

1 个答案:

答案 0 :(得分:0)

首先:

您在哪里将视图和视图模型添加到Unity?您应该在模块初始化过程中执行此操作。每个Prism模块都应该有一个实现IModule的类。

假设你已经这样做了:

阅读上面的代码,我看到正在创建一个区域,但是你没有为将要绑定到该区域的控件添加Xaml。

例如,我希望在Shell中看到以下内容:

<UserControl>
<Grid>
<ItemsControl Margin="0,20,0,0" cal:RegionManager.RegionName="MainWindowRegion" />
</Grid>
</UserControl>

这将创建MainWindowRegion并将其绑定到页面上的ItemsControl。加载此用户控件后,其区域将在Prism中注册并添加到默认RegionManager

如果您必须手动创建自己的Region,那么它可能不会绑定到控件,因此当您开始向Region添加视图时,它们将不会显示,因为Region未绑定到控件。

查看view/viewmodel分辨率,有一种更简单的方法:

SomeView在其构造函数中获取SomeViewModel参数,然后将其绑定到DataContext。 Unity会看到SomeView具有依赖关系并自动解决它...