c# - 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)
解决方案
Xamarin.Forms 中的绑定工作不那么明显,需要一些样板代码。
我将 AvailableMonths 和 AvailableYears 属性直接添加到 ExpenseEntriesViewModel 并相应地键入 ObservableCollection 和 ObservableCollection,它现在按预期工作。
推荐阅读
- azure - 在 powershell 中获取特定(Azure)命令详细信息
- node.js - 文档 AI 不支持的输入文件格式
- c++ - 会员和自由经营者的消歧规则
- jquery-chosen - 如何禁用删除选择中的选定选项?
- sql - 如何查询有多个联系电话的客户?SQL
- c++ - i have data in json format and want to convert it to csv
- html - Spring Boot 将旧版本的 CSS 文件应用于 JSP
- c++ - 如何转发声明 dlib::frontal_face_detector?
- ios - TensorFlowLiteSwift,TensorFlowLiteSelectTfOps 夜间铿锵声错误 - 未定义符号 _uprv_getICUData_conversion
- javascript - 根据从电子表格中获取的数据自动填充表单中的字段