C# 如何为item而不是TreeViewItem获取此绑定?

C# 如何为item而不是TreeViewItem获取此绑定?,c#,.net,wpf,treeviewitem,hierarchicaldatatemplate,C#,.net,Wpf,Treeviewitem,Hierarchicaldatatemplate,我得到了以下代码: <HierarchicalDataTemplate x:Key="AssignedRate" ItemsSource="{Binding Children}" DataType="{x:Type local:UnitRateCatElement}"> <ContentControl> <ContentControl.Template> <ControlTemplate>

我得到了以下代码:

<HierarchicalDataTemplate x:Key="AssignedRate" ItemsSource="{Binding Children}" DataType="{x:Type local:UnitRateCatElement}">
    <ContentControl>
        <ContentControl.Template>
            <ControlTemplate>
                <StackPanel Tag="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">
                    <TextBlock Text="{Binding Category.Description}" />
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Add Unit Rate"
                                      Command="{Binding Path=PlacementTarget.Tag.AddUnitRateCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                </StackPanel>
            </ControlTemplate>
        </ContentControl.Template>
        <ContentControl.Style>
            <Style TargetType="{x:Type ContentControl}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsDefined, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}" Value="True">
                        <Setter Property="Template">    
                            <Setter.Value>
                                <ControlTemplate>
                                    <TextBlock Text="Hello, it works!" />
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
    </ContentControl>
</HierarchicalDataTemplate>

行中的绑定:

是不正确的(VS这样说)。我怎样才能让它工作?类
local:unitrateCateElement
没有定义
IsDefined
属性。但我无法获得指向该对象的绑定权限。我怎样才能把这个装订好?

试试看

Binding="{Binding Path=DataContext.IsDefined, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}"
试一试


我想你应该这么做-

<DataTrigger Binding="{Binding Path=DataContext.IsDefined, 
             RelativeSource={RelativeSource Mode=FindAncestor, 
             AncestorType={x:Type TreeViewItem}}}" Value="True">

我想你应该这么做-

<DataTrigger Binding="{Binding Path=DataContext.IsDefined, 
             RelativeSource={RelativeSource Mode=FindAncestor, 
             AncestorType={x:Type TreeViewItem}}}" Value="True">

+1、这很有效。但是现在我发现,当我将
IsDefined
属性的值更改为true时,
TreeView
不会根据模板进行更新(属性更改通知被触发)。你知道为什么吗?谢谢。我想你应该把默认的ContentControl.Template也改成style。这可能是一个优先的问题。谢谢顺便说一句,它不象我那样工作的原因是什么?如果我以后打算更改某些属性的值,在xaml中放置默认值是一个坏主意吗?请阅读原因,不,我认为在xaml中这样做是可以的。+1,这很有效。但是现在我发现,当我将
IsDefined
属性的值更改为true时,
TreeView
不会根据模板进行更新(属性更改通知被触发)。你知道为什么吗?谢谢。我想你应该把默认的ContentControl.Template也改成style。这可能是一个优先的问题。谢谢顺便提一下它不能像我那样工作的原因是什么?如果我以后打算更改某些属性的值,将默认值放在xaml中是一个坏主意吗?请阅读原因,不,我认为在xaml中这样做是可以的。DefaultTemplate的Setter必须采用样式,第二个示例中的绑定是旧的。用于DefaultTemplate必须采用该样式,第二个示例中的绑定是旧的。