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

MAUI中Picker控件不显示选项的问题排查与解决求助

.NET MAUI Picker不显示选项的解决方法(MVVM模式)

问题根源分析

你的代码存在几个关键问题导致Picker无选项显示:

  • 集合未初始化:PrecisionesGps2仅声明但未创建ObservableCollection实例,直接调用Add会引发空引用异常
  • 类型不匹配:集合类型是ObservableCollection<PrecisionGpsUI>,但你直接添加字符串,而非PrecisionGpsUI对象
  • 访问权限不足:PrecisionesGps2是私有字段,无法被视图的绑定访问

分步修复方案

1. 修正ViewModel代码

将集合改为公共可绑定属性,完成初始化,并添加正确类型的实例:

// 使用CommunityToolkit.Mvvm的ObservableProperty让属性支持通知
[ObservableProperty]
private ObservableCollection<PrecisionGpsUI> _precisionesGps2 = new();

private void InicializarPrecisionesGps()
{
    // 添加PrecisionGpsUI实例,传入对应的GeolocationAccuracy枚举值
    PrecisionesGps2.Add(new PrecisionGpsUI(GeolocationAccuracy.High));
    PrecisionesGps2.Add(new PrecisionGpsUI(GeolocationAccuracy.Low));
}

注意:务必在ViewModel的构造函数中调用InicializarPrecisionesGps(),确保集合在视图绑定前完成数据初始化

2. 优化Picker的绑定配置

设置ItemDisplayBinding指定要显示的属性,避免依赖默认的ToString方法:

<Picker HorizontalTextAlignment="End"
        Grid.Column="1"
        ItemsSource="{Binding PrecisionesGps2}"
        SelectedItem="{Binding PrecisionesGpsSelectedItem}"
        ItemDisplayBinding="{Binding Precision}"/>

3. 确认绑定上下文正确

确保视图的BindingContext已设置为ViewModel实例,比如在页面构造函数中:

public YourPage()
{
    InitializeComponent();
    BindingContext = new YourViewModel();
}

补充说明

如果未使用CommunityToolkit.Mvvm,可手动实现INotifyPropertyChanged定义公共属性:

private ObservableCollection<PrecisionGpsUI> _precisionesGps2 = new();
public ObservableCollection<PrecisionGpsUI> PrecisionesGps2
{
    get => _precisionesGps2;
    set
    {
        _precisionesGps2 = value;
        OnPropertyChanged();
    }
}

同时PrecisionesGpsSelectedItem的类型需与PrecisionGpsUI一致,确保选中项绑定正常。

内容的提问来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:22:49