这个绑定有什么问题?

时间:2012-06-26 06:46:21

标签: wpf xaml mvvm binding styles

我正在尝试将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已正确设置为我的modelview,但RadMenuItem的datacontext为null。我错过了什么?

由于

1 个答案:

答案 0 :(得分:3)

ContextMenus不属于与其他用户相同的VisualTree,因此您的RelativeSource绑定未找到ListBox

您可以使用ContextMenu

PlacementTarget属性找到ContextMenu附加到的UI对象
<Style x:Key="ContextMenuStyle" TargetType="telerik:RadMenuItem">
    <Setter Property="DataContext" Value="{Binding PlacementTarget.DataContext, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadContextMenu}}}" />
</Style>