首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF MultiBinding和IMultiValueConverter进行布尔操作

WPF MultiBinding和IMultiValueConverter进行布尔操作
EN

Stack Overflow用户
提问于 2021-10-19 20:00:54
回答 1查看 413关注 0票数 1

我想用MultiBinding和IMultiValueConverter来做布尔OR。不幸的是,传递给转换器的值总是未设置的。

  • 第一个触发器"TriggerStyle“工作正常。该按钮根据"KeyPlugged“值启用/禁用.

  • --多头triger "EnableTriggerStyle“不起作用。在"BoolTestConverter“类中,值数组很好地设置为2个对象,但

values.Length =2

values=DependencyProperty.UnsetValue

values1=DependencyProperty.UnsetValue

XAML文件:

代码语言:javascript
运行
复制
<Window.Resources>
    <local:BoolTestConverter x:Key="BoolTestConverter"></local:BoolTestConverter>
    <Style x:Key="TriggerStyle" TargetType="Button">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=KeyPlugged}" Value="false">
                <Setter Property="Button.IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    <Style x:Key="EnableTriggerStyle" TargetType="Button">
        <Style.Triggers>
            <DataTrigger Value="false">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource BoolTestConverter}">
                        <Binding Path="KeyPlugged"/>
                        <Binding Path="KeyOpened"/>
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Button.IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

C#文件:

代码语言:javascript
运行
复制
class BoolTestConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool result = false;

        if (values.Length > 1)
        {
            if (values[0] == null || values[0] == DependencyProperty.UnsetValue)
                throw new NotImplementedException();

            result = System.Convert.ToBoolean(values[0]);
            for (int i = 1; i < values.Length; i++)
            {
                if (values[i] == null || values[i] == DependencyProperty.UnsetValue)
                    throw new NotImplementedException();

                result |= System.Convert.ToBoolean(values[i]);
            }
        }
        else
            throw new NotImplementedException();

        return result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-10-20 06:41:43

每次设置属性/值时,都会触发多绑定。第一次触发时,所有值都不会被绑定(未设置)。所以转换器会被多次触发。

您不应该抛出异常。相反,返回返回Binding.DoNothing,否则应用程序将中断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69637011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档