Silverlight View экспортирует DependencyProperty в ViewModel через MEF - PullRequest
1 голос
/ 01 декабря 2010

Мне нужен один DependencyProperty из View в моем конструкторе ViewModel:

Моя проблема: MEF не будет SatisfyImports () ', поскольку он помечен одним или несколькими ExportAttributes' (это исключение)

Это структура кода для ПРОСМОТРА:

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

В моем случае мне нужно было бы передать только свойства зависимости в данный момент ...

Спасибо

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Ваша работа не очень хороша ... разве вы не можете удалить экспорт из ChartTypes и передать его вручную тому, кто захочет?Я предполагаю, что viewmodel - только один заинтересованный в этом ..

0 голосов
/ 01 декабря 2010

Мне удалось это пережить!

Вместо кода в конструкторе по умолчанию я использую:

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

            container.ComposeParts(this);
        }
    }

и значение зависимости свойства правильно передается в ViewModel (должен делать это после загрузки элемента управления, иначе свойство будет иметь значение по умолчанию)

Однако я был бы очень признателен, если бы кто-то мог:

  • подскажите, как сгенерировать каталог из другой несвязанной сборки?

Спасибо

...