2012-01-16 259 views
0

我使用MVVM視圖模型一模式在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對於給定的ViewModel應該用作DataTemplate。真的在這裏我有一個Type!但我不知道如何通過MEFType創建實例?有人可以幫助我嗎?

回答

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; 
0

爲什麼你不使用內置的wpf東西來爲你的viewmodel獲得正確的視圖?如果你只是爲你的viewmodel創建一個datatemmplate並設置正確的view/usercontrol。然後全部完成。

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

任何地方在您的應用程序,你您的視圖模型綁定到ContentControl中其呈現爲MyIViewUserControl。

編輯:也許我錯了,但我想你使用你的ViewTypeAttribute(MEF導出屬性)來獲取視圖和viewmodel之間的鏈接。然後你想創建一個包含這些信息的數據模板?

那麼爲什麼不直接導出DataTemplate並將其添加到app.resources?

+0

因爲我的設計要求!你的'A'不是我的問題的答案!請再讀一遍 – 2012-01-16 18:27:47

+0

看我的編輯請。我想念什麼? – blindmeis 2012-01-17 06:33:11