Привязка данных UserControl через ControlTemplate - PullRequest
1 голос
/ 12 ноября 2009

Я играю с инфраструктурой xamDataGrid. Я хотел бы отобразить в «Поле» (= ячейка) пользовательский элемент управления UserControl и иметь для него DataContext поля. Каким-то образом DataContext всегда имеет значение null: -)

Вот XAML:

<UserControl.Resources>
  <Style x:Key="MyTestUserControl" TargetType="{x:Type igDP:CellValuePresenter}">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
          <myUC:MyTestUserControl
              DataContext="{Binding RelativeSource={RelativeSource TemplatedParent},
                                    Path=Value}" />
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  <Style x:Key="TextBoxField" TargetType="{x:Type igDP:CellValuePresenter}">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
          <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent},
                                  Path=Value}" />
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</UserControl.Resources>

DataContext для TextBoxField работает нормально, а DataContext для MyUserControl - нет.

Еще немного XAML, где я определяю поля:

<igDP:UnboundField BindingPath="SimpleTestStringToDisplay" Label="UnboundField">
  <igDP:Field.Settings>
    <igDP:FieldSettings CellValuePresenterStyle="{StaticResource TextBoxField}" />
  </igDP:Field.Settings>
</igDP:UnboundField>

<igDP:UnboundField BindingPath="MyUserControlViewModel"
                   Label="UnboundField (UserControl)">
  <igDP:Field.Settings>
    <igDP:FieldSettings CellValuePresenterStyle="{StaticResource MyTestUserControl}" />
  </igDP:Field.Settings>
</igDP:UnboundField>

Кто-нибудь знает, что я делаю не так?

Спасибо!

Ура, Джозеф

EDIT: Я тоже попробовал что-то подобное, но безуспешно:

  <myUC:MyUserControl DataContext="{TemplateBinding DataContext}" />

1 Ответ

0 голосов
/ 15 ноября 2009

ваш тестовый проект выше не имеет таких же привязок, как в шаблонах, но не на <igDP:UnboundField>

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

<igDP:UnboundField BindingPath="MyUserControlViewModel" Label="UnboundField" >
  <igDP:Field.Settings>
    <igDP:FieldSettings CellValuePresenterStyle="{StaticResource TextBoxField}" />
  </igDP:Field.Settings>
</igDP:UnboundField>

<igDP:UnboundField BindingPath="MyUserControlViewModel" Label="UnboundField (UserControl)">
  <igDP:Field.Settings>
    <igDP:FieldSettings CellValuePresenterStyle="{StaticResource MyTestUserControl}" />
  </igDP:Field.Settings>
</igDP:UnboundField>

если вы сделаете это, оба шаблона не получат свой контекст данных ?. поместите debugConverter (метод 2) на вашу привязку в шаблоне, чтобы убедиться, что ваша привязка происходит.

Кстати, какие сообщения об ошибках привязки вы получаете в окне вывода?

...