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

Xamarin IValueConverter求助:判断字符串是否与列表项字段相等

Xamarin IValueConverter 实现修正方案

需求说明

实现一个IValueConverter,输入字符串若匹配列表(来自JSON响应)中某一项的指定字符串字段,则返回该字段值;否则返回原字符串。

现有代码问题分析

  1. 转换器类中companyListA未定义,也没有接收外部加载数据的逻辑,无法访问城市列表
  2. 循环中错误使用companyListA.NameString,应使用循环变量item.NameString
  3. RetornaCiudad为异步方法,但没有将加载的列表传递给转换器的机制
  4. 类命名不符合C# PascalCase规范

修正后代码实现

转换器类

public class CityConverter : IValueConverter
{
    // 用于存储加载的城市列表
    public List<CiudadApi> CityList { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // 空值或非字符串输入直接返回原数据
        if (value is not string cityInput || CityList == null)
            return value;

        // 查找匹配的城市项
        var matchedCity = CityList.FirstOrDefault(item => item.NameString == cityInput);
        
        // 匹配到返回字段值,否则返回原输入
        return matchedCity?.NameString ?? cityInput;
    }

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

数据加载与转换器赋值

// 示例:在页面ViewModel或代码后台中实现
private CityConverter _cityConverter;

public async Task LoadCityData()
{
    _cityConverter = new CityConverter();
    
    using var httpClientCD = new HttpClient();
    var resultJsonCD = await httpClientCD.GetStringAsync("URLSTRING");
    var ciudadList = JsonConvert.DeserializeObject<CiudadApi[]>(resultJsonCD);
    
    // 将加载的列表绑定到转换器
    _cityConverter.CityList = ciudadList.ToList();
    
    // 若在XAML中绑定转换器,需更新绑定上下文或重新设置转换器实例
    // 例如:YourControl.SetBinding(Label.TextProperty, new Binding("CityName") { Converter = _cityConverter });
}

关键修正点

  • 给转换器添加CityList属性,实现外部数据注入
  • 使用FirstOrDefault简化查找逻辑,替代低效的foreach循环
  • 增加空值判断,避免空引用异常
  • 异步方法改为返回Task(异步void仅用于事件处理场景)
  • 修正列表项访问错误,改用item.NameString
  • 类名调整为符合C#规范的CityConverter

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:37