我在 WPF 应用程序中使用 MVVM viewmodel-first 模式,我有一些这样的定义:
public interface IMyView { }
[Export(typeof(IMyView))]
public class MyView : UserControl, IMyView { }
[ViewTypeAttribute(typeof(IMyView))]
public interface IMyViewModel { }
[Export(typeof(IMyViewModel))]
public class MyViewModel : ViewModelBase, IMyViewModel { }
ViewTypeAttribute
是一个自定义属性,用于检索哪个View
应该用作给定DataTemplate
的{{1}}。真的,我有一个ViewModel
!但我不知道如何通过Type
从Type
创建实例?请有人帮帮我吗?
答案 0 :(得分:1)
使用:
var container = new CompositionContainer(/* your container .ctor here */);
var type = typeof (IYourType); // read the type from attribute
var export = container.GetExports(type, null, null).FirstOrDefault();
var obj = export.Value as YourCostingHere;
答案 1 :(得分:0)
为什么你不使用内置的wpf东西来为你的viewmodel获得正确的视图?如果您只是为viewmodel创建一个datatemmplate并设置正确的view / usercontrol。一切都完成了。
<DataTemplate DataType={vm:IMyViewModel}>
<local:MyIViewUserControl />
</DataTemplate>
您的应用中将viewmodel绑定到contentControl的任何位置,将其呈现为MyIViewUserControl。
编辑:也许我错了,但我认为您使用ViewTypeAttribute(MEF导出属性)来获取视图和视图模型之间的链接。然后你想用这些信息创建一个数据模板吗?那么为什么不直接导出DataTemplate并将其添加到app.resources?