У меня есть приложение 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)