首页 > 解决方案 > Xamarin.Forms,选择器,显示 SelectedItem 的问题

问题描述

我有 Xamarin.Forms 应用程序,页面上有两个选择器。然后我有这个页面的视图模型:

public class ExpenseEntriesViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ExpenseEntriesViewModel()
    {
        // getting data from server here

        if (ExpenseEntriesDateRangeInfo.AvailableYears.Count > 0)
        {
            // AvailableYears is List<int>
            SelectedYear = ExpenseEntriesDateRangeInfo.AvailableYears.Max();
        }

        SelectedMonth =
            // AvailableMonths is List<MonthValue>
            ExpenseEntriesDateRangeInfo.AvailableMonths.FirstOrDefault(i => i.MonthNumber == DateTime.Today.Month);
    }

    public DateRangeInfo ExpenseEntriesDateRangeInfo { get; set; }

    private int _selectedYear;
    public int SelectedYear
    {
        get => _selectedYear;
        set
        {
            _selectedYear = value;
            OnPropertyChanged();
        }
    }

    private MonthValue _selectedMonth;
    public MonthValue SelectedMonth
    {
        get => _selectedMonth;
        set
        {
            _selectedMonth = value;
            OnPropertyChanged(nameof(SelectedMonth));
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

这是 MonthValue 模型:

public class MonthValue
{
    public int MonthNumber { get; set; }
    public string MonthName { get; set; }
}

模型和数据是正确的,我用调试器检查了代码并检查了。选择器的 XAML 标记:

<Picker Title="Month"
                        HorizontalOptions="FillAndExpand"
                        ItemsSource="{Binding ExpenseEntriesDateRangeInfo.AvailableMonths}"
                        ItemDisplayBinding="{Binding MonthName}"
                        SelectedItem="{Binding SelectedMonth, Mode=TwoWay}"/>
<Picker Title="Year"
                        HorizontalOptions="FillAndExpand"
                        ItemsSource="{Binding ExpenseEntriesDateRangeInfo.AvailableYears}"
                        SelectedItem="{Binding SelectedYear, Mode=TwoWay}"/>

年份选择器绑定到 int 列表,完美运行。月份选择器与 MonthValue 数组一起使用,并且不将 MonthName 属性显示为 SelectedItem 名称,这就是问题所在。有什么解决办法或想法吗?对我来说很简单的情况。

更新。在此处添加了带有问题演示的项目

它在真正的 android 设备上进行了测试(Android 6.0,API 23)

标签: c#.netxamarinxamarin.forms

解决方案


Xamarin.Forms 中的绑定工作不那么明显,需要一些样板代码。

我将 AvailableMonths 和 AvailableYears 属性直接添加到 ExpenseEntriesViewModel 并相应地键入 ObservableCollection 和 ObservableCollection,它现在按预期工作。


推荐阅读