1

我正在尝试将 DataContext 分配给一个 MenuItem,它是 ListBox 的一部分。

    <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。我想通过 ContextMenuStyle 将此 ViewModel 分配给每个 RadMenuItem 的 DataContext,但它不起作用。RadListBox 的 DataContext 已正确设置为我的模型视图,但 RadMenuItem 的 datacontext 为空。我错过了什么?

谢谢

4

1 回答 1

3

ContextMenusVisualTreeUI 的其余部分不同,因此您的RelativeSource绑定找不到ListBox

您可以ContextMenu使用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 回答