通过ControlTemplate对UserControl进行DataBinding

时间:2009-11-12 17:28:33

标签: c# wpf data-binding user-controls controltemplate

我正在玩Infragistics xamDataGrid。 我想在一个“Field”(= Cell)中显示一个自定义的UserControl,并为它提供Field的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>

TextBoxField的DataContext工作正常,但MyUserControl的DataContext却没有。

我定义字段的更多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>

有没有人知道我做错了什么?

谢谢!

干杯, 约瑟夫

编辑: 我也试过这样的事情,没有成功:

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

1 个答案:

答案 0 :(得分:0)

上面的测试项目没有相同的绑定,它在模板中但不在 <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 (method 2)绑定,以确保绑定正在发生。

顺便说一下,你在输出窗口中得到了哪些绑定失败消息?