You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在绑定布尔属性为False时将XAML元素的IsVisible设为True?

解决方案:布尔值取反绑定实现条件渲染

XAML绑定语法不支持直接用!对绑定值做逻辑取反,要实现你的需求,无需修改DigitalInput类,通过布尔取反转换器就能完成,具体步骤如下:

1. 实现布尔取反转换器

创建一个继承IValueConverter的转换器类,专门处理布尔值的取反逻辑:

using System;
using Microsoft.Maui.Controls;

// 替换为你项目实际的命名空间
namespace YourAppNamespace.Converters
{
    public class InverseBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value is bool boolValue ? !boolValue : false;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value is bool boolValue ? !boolValue : false;
        }
    }
}

2. 在页面资源中注册转换器

在ContentPage的资源节点里声明这个转换器,方便后续XAML引用:

<ContentPage ...
             x:Name="page"
             <!-- 引入转换器所在的命名空间 -->
             xmlns:converters="clr-namespace:YourAppNamespace.Converters">

    <ContentPage.Resources>
        <converters:InverseBooleanConverter x:Key="InverseBoolConverter" />
    </ContentPage.Resources>

    <!-- 原有ListView代码 -->
</ContentPage>

3. 修改红色球的绑定逻辑

把红色球的IsVisible绑定改为使用转换器,对value做取反处理:

<Image Source="ballred" IsVisible="{Binding value, Converter={StaticResource InverseBoolConverter}}"/>

完整修改后的XAML代码

<ContentPage ...
             x:Name="page"
             xmlns:converters="clr-namespace:YourAppNamespace.Converters"
             xmlns:services="clr-namespace:YourAppNamespace.Services">

    <ContentPage.Resources>
        <converters:InverseBooleanConverter x:Key="InverseBoolConverter" />
    </ContentPage.Resources>

    <ListView BindingContext="{x:Reference page}" ItemsSource="{Binding digitalInputs}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="services:DigitalInput">
                <ViewCell>
                    <HorizontalStackLayout>
                        <Image Source="ballgreen" IsVisible="{Binding value}"/>
                        <Image Source="ballred" IsVisible="{Binding value, Converter={StaticResource InverseBoolConverter}}"/>
                        <Label Text="{Binding valueText}" />
                    </HorizontalStackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage>

补充说明

转换器作为独立的逻辑单元,只负责绑定值的转换,完全不会影响DigitalInput类的原有结构,完美匹配你不想修改数据类的需求。另外注意修正了原代码中ItemSource的绑定语法错误(原代码是硬编码字符串,改为{Binding digitalInputs}才能正确绑定页面的digitalInputs集合)。

内容的提问来源于stack exchange,提问作者fonzane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:56:34