从属性创建实例

时间:2012-01-16 04:30:24

标签: c# wpf c#-4.0 mvvm mef

我在 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!但我不知道如何通过TypeType创建实例?请有人帮帮我吗?

2 个答案:

答案 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?