0

FindAncestor,我正在尝试在元素本地绑定:ItemPresenter 属性 EndDate。EndDate 在 local:Presenter 中定义。但它不绑定元素上的 EndDate 的值。

<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>

有任何想法吗?

4

2 回答 2

0

显式指向DataContextin 绑定可能会对您有所帮助

于 2013-11-11T09:58:27.393 回答
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>
于 2013-11-11T10:14:32.550 回答