6

2つのレベルのデータと各レベルをフォーマットするためTreeViewの2つのWPFがあります。第2レベルから、第1レベルのクラスのプロパティをバインドする必要がありますHierarchicalDataTemplateHierarchicalDataTemplate私はこの方法で試しましたが、機能しません:

Text="{Binding Path=Ori, RelativeSource={RelativeSource TemplatedParent}}"

プロパティのOri名前として

この方法でも機能しません:

Text="{Binding Path=tOri, RelativeSource={RelativeSource TemplatedParent}}"

プロパティをバインドする最初tOriのの名前として。TextBlockHierarchicalDataTemplateOri

手伝って頂けますか?

4

2 に答える 2

10

TemplatedParent は、ControlTemplate 内の親 Control のみを参照するため、DataTemplates では機能しません。代わりに FindAncestor を使用して親 TreeViewItem を見つけ、その DataContext にアクセスできます。

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}"
于 2010-07-15T12:52:09.300 に答える
0

TemplatedParentWPFのバインドを誤解しています。拡張TemplatedParentしている継承されたコントロールを参照します。例:を対象とするを書いたとします。ControlTemplateButton

<ControlTemplate TargetType="{x:Type Button}" x:Key="MyButtonTemplate">
   <Border BorderBrush="{TemplateBinding Property=Background}" BorderThickness="3" >
      <ContentPresenter Margin="10"/>
   </Border>
</ControlTemplate>

BorderBrushこれは、をベースButton.Backgroundプロパティにバインドしています。

目的を達成するには、 を使用してビジュアル ツリーをRelativeSource FindAncestorたどって親を見つけ、バインディングを実行する必要があります。Mole WPFまたはSnoopを使用してみてください。

注: 上記で入手可能な Snoop のコピーには、深刻な問題がいくつかあります。つまり、256 レベル以上の深さまで進むことができません。パッチを当てて機能を拡張したすばらしいバージョンがあります。開発中に Mole と Snoop2 を使用してデバッグ/視覚化する間の交換。

于 2010-07-15T13:03:15.447 に答える