MAUI C#中无需Xaml Entry控件,如何在后台代码获取DataModel字段值?
解决方案
问题根源
你的详情页构造函数中设置了BindingContext = this;,这会覆盖跳转时传入的选中项对象,导致无法获取原始的MyDataModel实例及其ID值。
方案一:利用BindingContext直接获取(推荐)
1. 修正详情页构造函数
移除覆盖BindingContext的代码:
public DetailPage() { InitializeComponent(); // 删除这行:BindingContext = this; }
2. 在提交事件中获取ID并保存
因为跳转时已经将选中的MyDataModel设为BindingContext,直接转换即可拿到ID,且Entry的绑定已经同步更新了模型的FirstName和LastName:
private async void Submit_Button_Clicked(object sender, EventArgs e) { // 获取绑定的原始数据模型 MyDataModel myRecord = BindingContext as MyDataModel; // 无需手动从Entry取文本,绑定已经自动更新了模型属性 await SaveRecord(myRecord); }
如果坚持要手动读取Entry文本(不推荐),也可以保留模型的ID:
private async void Submit_Button_Clicked(object sender, EventArgs e) { MyDataModel myRecord = BindingContext as MyDataModel; myRecord.FirstName = FirstNameEntry.Text; myRecord.LastName = LastNameEntry.Text; // ID已存在于myRecord中,直接使用 await SaveRecord(myRecord); }
方案二:通过构造函数传递选中项(更直观)
1. 修改详情页,添加带参构造函数
public MyDataModel SelectedRecord { get; set; } public DetailPage(MyDataModel selectedRecord) { InitializeComponent(); SelectedRecord = selectedRecord; // 设置BindingContext让Entry绑定生效 BindingContext = selectedRecord; }
2. 调整集合视图的跳转代码
private async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection.FirstOrDefault() != null) { MyDataModel mySelectedItem = e.CurrentSelection.FirstOrDefault() as MyDataModel; // 通过构造函数传递选中项 await Navigation.PushAsync(new DetailPage(mySelectedItem)); } }
3. 提交事件中直接使用SelectedRecord
private async void Submit_Button_Clicked(object sender, EventArgs e) { SelectedRecord.FirstName = FirstNameEntry.Text; SelectedRecord.LastName = LastNameEntry.Text; // 直接获取ID:SelectedRecord.ID await SaveRecord(SelectedRecord); }
内容的提问来源于stack exchange,提问作者SqueezeOJ
相关产品推荐
相关产品推荐

