2012-05-03 9 views
3

ItemsControlは以下のように定義されています。基本的には、エディタ(EditorList)のリストがあり、それぞれにハイパーリンクが必要です。しかし、私のオープンコマンド(OpenEditorCommand)プロパティは、エディタのリストと同じレベルにあります。コンテキストがリスト内の項目に設定されている場合、そのプロパティをどのように参照しますか。私はRelativeSourceメソッドで作業しようとしましたが、理解するにはあまりに複雑です。正しい軌道にいるのですか?祖先のデータコンテキスト内でプロパティにバインドするにはどうすればよいですか?

<ItemsControl ItemsSource="{Binding EditorList}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Margin="2,6" HorizontalAlignment="Center"> 
      <Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl, AncestorLevel=2, Mode=FindAncestor}, Path=OpenEditorCommand}" CommandParameter="{Binding Name}"> 
       <StackPanel> 
        <Image Source="{Binding Image}" Width=32/> 
        <TextBlock Text="{Binding Path=Name}"/> 
       </StackPanel> 
      </Hyperlink> 
     </TextBlock> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+2

? –

+0

コードの書式設定ボタンが表示されないため、ウェブサイトが機能していないか、ブラウザを更新する必要があります。私は別のコンピュータで試してみましょう。 – bsh152s

答えて

4

あなただけの要素ツリー内の既存の検索タイプの複数の祖先はおそらくがある場合にAncestorLevelを設定する必要があります。デフォルト値は1で、最も近いものを検索します。

しかし、あなたはItemsControlDataContextOpenEditorCommandにバインドするPathに指定する必要があります。以下に示すように

Command="{Binding Path=DataContext.OpenEditorCommand, RelativeSource={RelativeSource AncestorType=ItemsControl, Mode=FindAncestor}}" 
+0

それはトリックをしました... "DataContextを忘れました。"パスで。ありがとう。 – bsh152s

関連する問題