Создать экземпляр из атрибута - PullRequest
0 голосов
/ 16 января 2012

Я использую шаблон MVVM * first-first в приложении WPF , и у меня есть некоторые определения, подобные этим:

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 для данного ViewModel. На самом деле здесь у меня есть Type! Но я не знаю, как создать экземпляр из этого Type через MEF? Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 16 января 2012

использование:

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;
0 голосов
/ 16 января 2012

почему вы не используете встроенный материал wpf, чтобы получить правильный вид для вашей модели представления?если вы просто создаете шаблон данных для вашей модели представления и устанавливаете правильный view / usercontrol.тогда все готово.

<DataTemplate DataType={vm:IMyViewModel}>
  <local:MyIViewUserControl />
</DataTemplate>

в любом месте вашего приложения, где вы привязываете свою view-модель к контент-контролю, отображаемому как MyIViewUserControl.

РЕДАКТИРОВАТЬ: возможно, я ошибаюсь, но я подумалВы используете свой ViewTypeAttribute (MEF Export Attribute), чтобы получить связь между view и viewmodel.А затем вы хотите создать шаблон данных с этой информацией?

, так почему бы не экспортировать DataTemplate напрямую и добавить его в app.resources?

...