0

在 WPF 中,我有两个相互相反的菜单项(X 勾选,然后 Y 未勾选,反之亦然)。

是否可以使用单个 bool 属性来绑定这两者?

例如下面,我使用了 !IsX 但它不工作!

<MenuItem Header="X or Y">
    <MenuItem IsCheckable="True" Header="Is X?" IsChecked="{Binding Path=IsX, Mode=TwoWay}" />
    <MenuItem IsCheckable="True" Header="Is Y?" IsChecked="{Binding Path=!IsX, Mode=TwoWay}" />
</MenuItem>
4

1 回答 1

2

您需要为此编写一个自定义转换器:

[ValueConversion(typeof(bool), typeof(bool))]
public class InverseBooleanConverter: IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool))
            throw new InvalidOperationException("The target must be a boolean");

        return !(bool)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool))
            throw new InvalidOperationException("The target must be a boolean");

        return !(bool)value;
    }

    #endregion
}

然后在您的标记中:

<MenuItem Header="X or Y">
    <MenuItem IsCheckable="True" Header="Is X?" IsChecked="{Binding Path=IsX, Mode=TwoWay}" />
    <MenuItem IsCheckable="True" Header="Is Y?" IsChecked="{Binding Path=IsX, Mode=TwoWay, Converter={StaticResource InverseBooleanConverter}}" />
</MenuItem>

你也应该在你的资源文件中创建一个实例

于 2017-04-10T05:24:00.767 回答