Xamarin-C#后端绑定生效但前端输入变更未同步至模型问题
问题根因
你当前的写法是直接给Entry的Text属性做一次性静态赋值,没有建立Xamarin绑定体系下的双向绑定关联,所以只有初始化时能拿到模型值,控件修改后不会反向同步到模型。
修复方案
- 替换直接给Text赋值的写法,改用
SetBinding方法建立双向绑定:
var entry = new Entry() { WidthRequest = 100 }; // 建立Entry的Text属性和绑定上下文的EditFirstname属性的双向绑定 entry.SetBinding(Entry.TextProperty, nameof(Model.EditFirstname), BindingMode.TwoWay); stackLayoutF.Children.Add(entry); stackLayoutContent.Children.Add(stackLayoutF);
- 确认模型类已经正确实现
INotifyPropertyChanged接口:你代码里用到的SetProperty方法只要是标准实现就没问题,标准实现参考如下:
public class YourModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null) { if (EqualityComparer<T>.Default.Equals(storage, value)) return false; storage = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); return true; } private string _editFirstname = "United"; public string EditFirstname { get => _editFirstname; set => SetProperty(ref _editFirstname, value); } }
- 你原有的
this.BindingContext = Model;赋值逻辑正确,无需修改。
补充说明
Xamarin中Entry的Text属性默认绑定模式就是TwoWay,如果你没有修改过全局默认配置,SetBinding中的BindingMode.TwoWay参数可以省略,显式声明可以避免歧义。
内容的提问来源于stack exchange,提问作者JaDa-ma
相关产品推荐
相关产品推荐

