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

Xamarin如何将其他项目的类属性绑定到Picker.ItemDisplayBinding

问题根因

你遇到的问题由两个错误共同导致:

  • 依赖项目中magasin类的Name是公共字段,而Xamarin.Forms绑定系统仅支持绑定公共属性,不支持直接绑定字段
  • ItemDisplayBinding的路径配置错误,不需要携带命名空间、类名前缀,只需写对应属性名即可

修复步骤

第一步:修改otherProject中magasin类的定义

将公共字段改为公共自动属性:

namespace otherProject
{
   public class magasin
   {
    // 改为自动属性,添加{ get; set; }
    public string Code { get; set; }
    public string Name { get; set; }

    public magasin(string code)
    {
        Code = code;
    }

    public static List<magasin> chargerMagasins(){
    //Code here}
   }
}

第二步:修改主项目后台的ItemDisplayBinding配置

移除路径的命名空间、类名前缀,直接绑定Name属性即可:

if (listeMagasin != null)
{
    pickerMagasin.ItemsSource = listeMagasin;
    // 直接绑定属性名即可
    pickerMagasin.ItemDisplayBinding = new Binding("Name");
}

可选替代方案(无需修改绑定配置)

如果你可以修改magasin类,也可以直接重写类的ToString()方法,返回要展示的Name属性,这种情况下不需要额外设置ItemDisplayBinding,Picker会自动调用ToString()渲染选项:

namespace otherProject
{
   public class magasin
   {
    public string Code { get; set; }
    public string Name { get; set; }

    public magasin(string code)
    {
        Code = code;
    }

    // 重写ToString方法
    public override string ToString()
    {
        return Name;
    }

    public static List<magasin> chargerMagasins(){
    //Code here}
   }
}

特殊情况:无法修改otherProject代码的解决方案

如果依赖项目的magasin类不允许修改,你可以在主项目中创建一个包装类,或者在给Picker赋值前将数据源转为匿名类:

if (listeMagasin != null)
{
    // 转为带Name属性的匿名类,绑定逻辑不变
    pickerMagasin.ItemsSource = listeMagasin.Select(m => new { m.Name, Source = m }).ToList();
    pickerMagasin.ItemDisplayBinding = new Binding("Name");
}
// 取值的时候可以从SelectedItem的Source属性拿原始的magasin对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:03