gpt4 book ai didi

wpf - 这个绑定(bind)有什么问题?

转载 作者:行者123 更新时间:2023-12-03 10:24:05 30 4
gpt4 key购买 nike

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

谢谢

最佳答案

ContextMenus不属于同一VisualTree作为 UI 的其余部分,所以您的 RelativeSource绑定(bind)未找到 ListBox
您可以找到 UI 对象 ContextMenu通过使用 PlacementTarget 附加到ContextMenu 的属性(property)

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

关于wpf - 这个绑定(bind)有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202021/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com