Silverlight View通过MEF将DependencyProperty导出到ViewModel

时间:2010-12-01 13:28:29

标签: silverlight mvvm mef

我的ViewModel构造函数中的View需要一个DependencyProperty:

我的问题: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);
        }
    }
}

和VIEWMODEL:

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

请给我任何关于此的提示,或者建议通过mef传递参数的更好解决方案

在我的情况下,我现在只需要传递dependecyproperty's ...

由于

2 个答案:

答案 0 :(得分:1)

你的工作并不是很好..你不能从ChartTypes中删除导出并将其手动传递给想要它的人吗?我认为viewmodel只是一个对它感兴趣的人..

答案 1 :(得分: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值正确传播到ViewModel (必须在加载控件后执行此操作,否则属性将具有其默认值)

但是,如果有人可以,我将非常感激:

  • 告诉我如何从另一个未引用的程序集生成目录?

由于