我正在尝试将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。我错过了什么?
由于
答案 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>