什么不对的结合?(What's wrong with this binding?)

2019-07-30 02:58发布

我想要的DataContext分配给一个菜单项,这是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设置我的视图模型。 我想通过ContextMenuStyle分配这个视图模型的每一个RadMenuItem的DataContext的,但它不工作。 RadListBox的DataContext的已正确设置为我的模型观察,但RadMenuItem的的datacontext为空。 我在想什么?

谢谢

Answer 1:

ContextMenus是不一样的一部分VisualTree作为UI的休息,所以你RelativeSource绑定没有找到ListBox

你可以找到的UI对象ContextMenu通过使用连接到PlacementTarget的财产ContextMenu

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


文章来源: What's wrong with this binding?