Prism v4, MEF WPF DataBinding - PullRequest
       36

Prism v4, MEF WPF DataBinding

1 голос
/ 11 февраля 2011

Во-первых, несколько вопросов относительно привязки данных:

  • Является ли DataContext по умолчанию для элемента управления, установленного в коде позади?Например, если у меня есть переменная orderNumber в test.xaml.cs, могу ли я просто сослаться на нее так же, как в xaml {Binding orderNumber}?
  • Правильно ли, что я могу только привязать данные к свойствамobject?

У меня есть служба Prism в отдельном модуле / сборке, которую я импортирую в приложение Shell через MEF.Я пытаюсь привязать данные к ней, но она не работает.

Мой обходной путь ниже. В моем Shell.xaml.cs:

[Import(AllowRecomposition = false)]
private IRibbonService _menuService;
public IRibbonService MenuService
{
    get
    {
        return _menuService;
    }
}


public void OnImportsSatisfied()
{
    Debug.WriteLine("Imports satisfied", "Prism");
    this._moduleManager.LoadModuleCompleted += new EventHandler<LoadModuleCompletedEventArgs>(moduleManager_LoadModuleCompleted);

    //TODO figure out how to properly bind to the ribbon
    Ribbon.DataContext = _menuService;
    RibbonAppMenu.DataContext = _menuService.ApplicationMenuData;
}

Есть ли способ установить текст данных в xaml до того, как будет установлен объект, особенно в отношении сценария MEF / Prism?На своем объекте ленты я попытался DataContext="{Binding MenuService}", но это не сработало.

1 Ответ

4 голосов
/ 11 февраля 2011

Является ли DataContext по умолчанию для элемента управления установленным за кодом? Например, если у меня есть переменная orderNumber в test.xaml.cs, могу ли я просто сослаться на нее как в xaml {Binding orderNumber}?

Нет. По умолчанию DataContext отсутствует, и он наследуется от родителя с использованием механизмов иерархии в WPF. Вам нужно явно установить DataContext для элемента управления, если вы хотите, чтобы он был.

Правильно ли, что я могу только привязать данные к свойствам объекта?

Да. Вы можете привязать только к свойствам. Если вы хотите, чтобы двухстороннее связывание работало, объект также должен быть DependencyObject или реализовать INotifyPropertyChanged.

Есть ли способ установить текст данных в xaml до установки объекта, особенно в отношении сценария MEF / Prism? На моем объекте ленты я попробовал DataContext = "{Binding MenuService}", но это не сработало.

Это попытается установить DataContext в свойство MenuService содержащего DataContext, используя иерархию (то есть: свойство MenuContext родительского элемента управления / окна в MenuService). Вы не можете связать себя, чтобы установить DataContext.

Вы можете создать новый объект в XAML для использования в качестве DataContext или сделать так, чтобы содержащий объект предоставил вам DataContext.

...