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必须采用该样式,第二个示例中的绑定是旧的。