开发者

Silverlight View exporting DependencyProperty to ViewModel via MEF

开发者 https://www.devze.com 2023-01-28 08:01 出处:网络
I have a need of one DependencyProperty from a View in my ViewModel constructor: My problem: MEF wouldn\'t SatisfyImports() \'because it is marked with one or more ExportAttributes\' (that is the exc

I have a need of one DependencyProperty from a View in my ViewModel constructor:

My problem: MEF wouldn't SatisfyImports() 'because it is marked with one or more ExportAttributes' (that is the exception)

This is the code structure for the 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 l开发者_如何学编程oad the View Model
            CompositionInitializer.SatisfyImports(this);
        }
    }
}

and the VIEWMODEL:

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

Please give me any hints on this or maybe suggest a better solution for passing parameters through mef

In my case, I would need to pass only dependecyproperty's for now...

Thanks


Your work around isn't really good.. can't you remove the export from ChartTypes and pass it manually to whoever wants it? I presume the viewmodel is only one insterested in it..


I managed to put this through !

Instead of the code in the default constructor, I use:

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

            container.ComposeParts(this);
        }
    }

and the dependencyproperty value is correctly propagated to the ViewModel (must do this after control is loaded, or the property will have its default value)

However, I would be very grateful if someone could:

  • tell me how generate a catalog from another non-referenced assembly?

Thanks

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号