gpt4 book ai didi

c# - MenuItem.IsEnabled 绑定(bind)到是否在列表框中选择了某些内容,但它不会更新

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:19 24 4
gpt4 key购买 nike

我有一个 MenuItem,只有在 ListBox 中选择了某些内容时才应启用它。我写了一个从对象到 bool 的转换器,如果该对象 == null,它返回 false,否则返回 true。我用我的转换器将它绑定(bind)到 ListBox.SelectedItem,但它不起作用。在转换器中放置一个断点表明它永远不会运行。无论如何,MenuItem 始终处于启用状态。

这是 ListBox 和 MenuItem 的 xaml 代码

<ListBox Name="TestsListBox" 
HorizontalAlignment="Left" Height="93" VerticalAlignment="Top" Width="128"
Margin="0,5,-1.723,0" ItemsSource="{Binding Path=Tests, Mode=OneWay}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" Click="removeTest"
IsEnabled="{Binding ElementName=TestsListBox, Mode=OneWay,
Path=SelectedItem, Converter={StaticResource ObjectToBool}}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>

这里我展示了如何将转换器声明为窗口的资源

<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:ClassesLib="clr-namespace:Laba1;assembly=ClassesLib"
xmlns:local="clr-namespace:WpfApplication"
Title="MainWindow" Height="450" Width="525">
<Window.Resources>
<local:ObjectToBoolConverter x:Key="ObjectToBool"/>
</Window.Resources>

这是转换器类

namespace WpfApplication
{
class ObjectToBoolConverter: IValueConverter
{
// Converts value to boolean. If value is null, returns false.
// Otherwise returns true
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
if (null == value)
{
return false;
}
return true;
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("This is oneway converter, so ConvertBack is not supported");
}
}
}

最佳答案

RelativeSource and Popup

从这里您应该能够发现 ElementName 绑定(bind)不起作用的原因是因为 ContextMenu 不像其他控件那样属于可视化树的一部分,因此无法参与此类绑定(bind)场景。据我所知,PopUps 有一个 PlacementTarget 属性,您可以绑定(bind)到该属性并弄清楚如何使用。

关于c# - MenuItem.IsEnabled 绑定(bind)到是否在列表框中选择了某些内容,但它不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989313/

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