从模板绑定DataTemplate数据的问题

时间:2013-11-11 09:48:54

标签: c# wpf templates binding

FindAncestor,我正在尝试绑定元素local:ItemPresenter属性EndDate。 EndDate在local:Presenter中定义。但它并没有将EndDate的值绑定在Element上。

<Style TargetType="{x:Type local:Presenter}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:Presenter}">
                <ItemsControl ItemsSource="{TemplateBinding ItemsSource}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <ContentControl Content="{Binding}">
                                <ContentControl.Resources>
                                    <!-- more Typed DataTemplates -->
                                    <DataTemplate DataType="{x:Type item:ItemSubProjects}">
                                        <local:ItemPresenter
                                            EndDate="{Binding EndDate, RelativeSource={RelativeSource FindAncestor, AncestorType=local:Presenter}}">
                                        </local:ItemPresenter>
                                    </DataTemplate>
                                </ContentControl.Resources>
                            </ContentControl>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

明确指出绑定中的DataContext可能会对您有所帮助

答案 1 :(得分:0)

您不需要x:Type绑定此处,您只需传递该类型即可。此外,您尚未将模式指定为相对源绑定。

此外,您可能还想将ItemPresenter属性设置移动到样式。

试试这个。

<Style TargetType="{x:Type local:ItemPresenter">
  <Setter Property="EndDate" Value="{Binding EndDate, RelativeSource={RelativeSource FindAncestor, AncestorType=local:Presenter}" />
</Style>
<Style TargetType="{x:Type local:Presenter}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:Presenter}">
                <ItemsControl ItemsSource="{TemplateBinding ItemsSource}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <ContentControl Content="{Binding}">
                                <ContentControl.Resources>
                                    <!-- more Typed DataTemplates -->
                                    <DataTemplate DataType="{x:Type item:ItemSubProjects}">
                                        <local:ItemPresenter />
                                    </DataTemplate>
                                </ContentControl.Resources>
                            </ContentControl>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>