2010-12-01 28 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