1

ListBox の一部である MenuItem に DataContext を割り当てようとしています。

    <Style x:Key="ContextMenuStyle" TargetType="telerik:RadMenuItem">
        <Setter Property="DataContext" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=telerik:RadListBox}, Path=DataContext}" />
    </Style>

     <DataTemplate x:Key="TemplateSelector">
            <ContentPresenter Content="{Binding}" Name="contentPresenter">
                <telerik:RadContextMenu.ContextMenu>
                    <telerik:RadContextMenu>
                        <telerik:RadMenuItem Header="Connect" Click="RadMenuItem_Click" Style="{StaticResource ResourceKey=ContextMenuStyle}" />
                        <telerik:RadMenuItem Header="Disconnect" />
                        <telerik:RadMenuItem Header="Delete Database" />
                    </telerik:RadContextMenu>
                </telerik:RadContextMenu.ContextMenu>
            </ContentPresenter>
     </DataTemplate>


    <Grid>
        <telerik:RadListBox x:Name="lsbDevices" ItemsSource="{Binding Path=Devices}" ItemTemplate="{StaticResource TemplateSelector}" 
                            SelectedItem="{Binding SelectedDevice, Mode=TwoWay}" Grid.Row="0" />
    </Grid>

これが私がすることです。RadListBox の DataContext は ViewModel に設定されています。この ViewModel を ContextMenuStyle を介してすべての RadMenuItem の DataContext に割り当てたいのですが、うまくいきません。RadListBox の DataContext はモデル ビューに適切に設定されていますが、RadMenuItem の datacontext は null です。私は何が欠けていますか?

ありがとう

4

1 に答える 1

3

ContextMenusVisualTreeUIの残りの部分と同じでRelativeSourceはないため、バインディングは見つけられませんListBox

のプロパティをContextMenu使用して、 がアタッチされている UI オブジェクトを見つけることができます。PlacementTargetContextMenu

<Style x:Key="ContextMenuStyle" TargetType="telerik:RadMenuItem">
    <Setter Property="DataContext" Value="{Binding PlacementTarget.DataContext, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadContextMenu}}}" />
</Style>
于 2012-06-26T16:33:00.340 に答える