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

如何根据列表项DriveItem.Publication.Level值动态切换XAML显示图标

实现方案

无需额外新增业务属性,有两种成熟的方案可以直接实现XAML侧的条件判断逻辑:

方案1:IValueConverter(你最终采用的方案,可复用性更高)

首先补全IconValueConverter的实现代码:

using System;
using Xamarin.Forms;

namespace GraphTutorial.Models
{
    public class IconValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is string level)
            {
                // Segoe MDL2 Assets字体中 锁定图标编码为E701,解锁图标编码为E702
                return level switch
                {
                    "checkout" => "\uE701",
                    "published" => "\uE702",
                    _ => string.Empty
                };
            }
            return string.Empty;
        }

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

之后在XAML页面的资源节点注册转换器:

<ContentPage.Resources>
    <models:IconValueConverter x:Key="IconValueConverter" xmlns:models="clr-namespace:GraphTutorial.Models"/>
</ContentPage.Resources>

即可直接使用你最终编写的绑定代码正常渲染图标:

<Label Grid.Column="1" 
       Text="{Binding Path=DriveItem.Publication.Level,Converter={StaticResource IconValueConverter}}" 
       FontFamily="Segoe MDL2 Assets" />

方案2:DataTrigger(修复你之前的报错问题)

你之前使用DataTrigger报错是因为Xamarin.Forms的Binding语法不支持RelativeSource={RelativeSource Self}写法,直接绑定数据源的Level字段即可,无需绕一层Tag属性,简化后的实现如下:

<ListView.Resources>
    <Style x:Key="PublicationStatus" TargetType="Label">
        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding DriveItem.Publication.Level}" Value="checkout">
                <Setter Property="Text" Value="\uE701"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding DriveItem.Publication.Level}" Value="published">
                <Setter Property="Text" Value="\uE702"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ListView.Resources>

调用时直接关联Style即可:

<Label Grid.Column="1" Style="{StaticResource PublicationStatus}" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:02