gpt4 book ai didi

c# - ContextMenuItem isEnabled 绑定(bind)到 Object 属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:21 27 4
gpt4 key购买 nike

我有一个 ContextMenu 用于在 TreeView 中声明的 TreeView 项目:

<TreeView  ItemsSource="{Binding countries, Mode=TwoWay}" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type myapp:City}" ItemsSource="{Binding Cities}">
<StackPanel Orientation="Horizontal" ContextMenu="{StaticResource CityItem}">
<TextBlock Text="{Binding CityName}" FontSize="14" Foreground="Bisque"/>
...

上下文菜单本身声明为:

<ContextMenu x:Key ="CityItem"  StaysOpen="true" Foreground="Bisque">
<MenuItem Header="Edit City" CommandParameter="{Binding Parent, RelativeSource={RelativeSource Self}}" Click="EditCityClick"/>
<MenuItem Header="DeleteCity" CommandParameter="{Binding Parent, RelativeSource={RelativeSource Self}}" Click="DeleteCityClick"/>
</ContextMenu>

好了,此时一切正常

private void DeleteCityClick(object sender, RoutedEventArgs e)
{
City city = ((FrameworkElement)e.OriginalSource).DataContext as City;
...
}

我可以访问城市对象,修改,删除,以及根据城市和城市属性的变化在 gui 中更新的任何内容(onpropertychanged 工作正常)。

问题是如何禁用 ContextMenuItem 绑定(bind) IsEnabled 到 City 对象属性?假设

public bool IsEnabled { get; set;}

我尝试了几种方法,但不知道如何从 ContextMenu MenuItem 访问源对象(城市)。

谢谢!

已编辑:很抱歉打字错误,但是:

public string IsEnabled { get; set;}

实际上是:

public bool IsEnabled { get; set;}

编辑 2:

有趣的“不是 wpf...”

enter image description here

最佳答案

试试这个:

<MenuItem ... IsEnabled="{Binding PlacementTarget.DataContext.IsEnabled, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />

它绑定(bind)到父ContextMenuPlacementTargetDataContext,它应该是一个City对象.

关于c# - ContextMenuItem isEnabled 绑定(bind)到 Object 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231343/

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