Wpf 如何在没有参数化构造函数的情况下加载PRISM V4视图?
我有一个关于视图加载方式的问题。下面显示了正确加载视图的示例代码:Wpf 如何在没有参数化构造函数的情况下加载PRISM V4视图?,wpf,mef,prism-4,Wpf,Mef,Prism 4,我有一个关于视图加载方式的问题。下面显示了正确加载视图的示例代码: [ViewExport(RegionName = RegionNames.LeftRegion)] [PartCreationPolicy(CreationPolicy.Shared)] public partial class EmployeeListView : UserControl { [ImportingConstructor] public EmployeeListView(EmployeeL
[ViewExport(RegionName = RegionNames.LeftRegion)]
[PartCreationPolicy(CreationPolicy.Shared)]
public partial class EmployeeListView : UserControl
{
[ImportingConstructor]
public EmployeeListView(EmployeeListViewModel viewModel)
{
InitializeComponent();
//this.DataContext = viewModel;
}
[Import]
public EmployeeListViewModel Model
{
get
{
return DataContext as EmployeeListViewModel;
}
set
{
DataContext = value;
}
}
}
关于上述代码的注释:
[ViewExport(RegionName = RegionNames.MainRegion)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class PositionSummaryView : UserControl
{
public PositionSummaryView()
{
InitializeComponent();
}
#region IPositionSummaryView Members
[Import]
public IPositionSummaryViewModel Model
{
get
{
return DataContext as IPositionSummaryViewModel;
}
set
{
DataContext = value;
}
}
#endregion
}
我的问题如下:
如果您不打算在构造函数中使用
[ImportingConstructor]
,那么在构造函数中添加[ImportingConstructor]
就没有什么意义了。另一方面,如果您的EmployeeListViewModel
实例是EmployeeListView
的必需依赖项,那么您可能应该通过构造函数将其传入
双重进口将导致以下情况:
[ImportingConstructor]
属性构造,允许注入EmployeeListViewModel的实例
模型
将注入EmployeeListViewModel
的实例EmployeeListViewModel
在实例化过程中执行任何繁重的操作(例如访问数据库或服务),并且创建为非共享部分([PartCreationPolicy(CreationPolicy.NonShared)]
),则不必要地实例化该部分两次,并加倍您的工作量。如果共享该部件,则问题就不那么严重了
但在回答你的问题时
PositionSummaryView(){}
)来处理任何没有标记为ImportingConstructorAttribute
的构造函数的类型。因此,在PositionSummaryView
的情况下,它将检查[ImportingConstructor]
装饰属性,不会找到它,因此将使用默认构造函数[Import]
。我会很惊讶断点没有被击中,虽然。。。我会检查你的构建模式(Debug | Release
),等等非常感谢你的解释,马修。代码现在运行良好。