2010-12-01 30 views
1

出口的DependencyProperty到視圖模型我從View需要一個的DependencyProperty在我的視圖模型構造:Silverlight的閱覽通過MEF

我的問題:MEF不會SatisfyImports()「,因爲它被標記爲一個或多個ExportAttributes '(即除外)

這是VIEW的碼結構:

public class MyView : UserControl 
{ 
    [Export(MethodTypes.ChartType)] 
    public Charts MyChartType 
    { 
     get 
     { 
      object k = GetValue(ChartTypeProperty); 
      Charts f = (Charts)Enum.Parse(typeof(Charts), k.ToString(), true); 
      return f; 
     } 
     set 
     { 
      SetValue(ChartTypeProperty, value); 
     } 
    } 

    [Import(ViewModelTypes.GenericChartViewModel)] 
    public object ViewModel 
    { 
     set 
     { 
      DataContext = value; 
     } 
    } 

    public MyView() 
    { 
     InitializeComponent(); 

     if (!ViewModelBase.IsInDesignModeStatic) 
     { 
      // Use MEF To load the View Model 
      CompositionInitializer.SatisfyImports(this); 
     } 
    } 
} 

和視圖模型:

[PartCreationPolicy(CreationPolicy.NonShared)] 
[Export(ViewModelTypes.GenericChartViewModel)] 
public class GenericChartViewModel 
{ 
    [ImportingConstructor] 
    public GenericChartViewModel([Import(MethodTypes.ChartType)] Charts forChartType) 
    { 
     string test = forChartType.ToString(); 
    } 
} 

請給我對此有什麼提示或建議可能通過MEF

傳遞參數在我的情況下更好的解決方案,我需要只傳遞dependecyproperty是現在...

感謝

回答

1

你的解決辦法是不是真的很好..你不能刪除ChartTypes出口,並將它傳遞手動誰想呢?我認爲這個視圖模型只是其中一個有用的東西。

+1

是的,只有VM需要它; 你能否更具體地關於手動傳遞屬性?我真的不明白怎麼做... 此外,我的方法是不使用構造函數([Import(MethodTypes.ChartType)] Chart forChartType,IModel模型) 任何想法呢? 因爲沒有CompositionInitializer.SatisfyImports()? – dvox 2010-12-02 11:01:53

0

我設法通過了!

,而不是在默認的構造函數的代碼,我使用:

void MyView_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (!ViewModelBase.IsInDesignModeStatic) 
     { 
      var catalog = new TypeCatalog(typeof(GenericChartViewModel)); 
      var container = new CompositionContainer(catalog); 

      container.ComposeParts(this); 
     } 
    } 

和的DependencyProperty值正確地傳播到視圖模型 加載控制後(必須這樣做,否則酒店將有其默認值)

不過,我會很感激,如果有人能:

  • 告訴我如何生成另一個非參考目錄d組裝?

感謝

+0

你的意思是沒有引用的程序集? – hammett 2010-12-03 01:50:21