Xamarin开发中Realm数据库模型数据绑定失效如何解决
问题原因
- 核心问题:
SettingsViewModel中定义的AppSettings是公共字段,Xamarin.Forms 的数据绑定机制仅支持绑定公共属性,不支持字段,这就是普通属性test绑定正常但AppSettings下的属性绑定失效的根本原因。 - 次要问题:XAML 代码中 Host、Port 两个输入框的绑定路径错误,写的是
Config.Host、Config.Port,但你的 ViewModel 中并没有名为Config的属性,正确的绑定路径应该是AppSettings.Host、AppSettings.Port。
解决步骤
- 修改ViewModel中的AppSettings为公共属性
将SettingsViewModel里的字段定义:
public AppSettings AppSettings;
修改为属性定义,如果你的 BaseViewModel 提供了 SetProperty 方法,推荐写成支持属性变更通知的形式:
private AppSettings _appSettings; public AppSettings AppSettings { get => _appSettings; set => SetProperty(ref _appSettings, value); }
如果没有 SetProperty 方法,最简单的修改就是直接加{ get; set; }:
public AppSettings AppSettings { get; set; }
- 修正XAML中错误的绑定路径
找到 Host、Port 对应的 Entry 控件,修改绑定路径:
<Entry Text="{Binding AppSettings.Host}" Placeholder="mail.gmx.net"/> <Label Text="Port"/> <Entry Text="{Binding AppSettings.Port}" Placeholder="587"/>
- 可选优化
Realm 原生的RealmObject已经实现了INotifyPropertyChanged接口,AppSettings类的属性变更会自动通知UI,不需要额外处理。如果你需要替换整个AppSettings对象也能触发UI更新,就必须用带属性变更通知的属性写法。
修改完成后重新运行项目,绑定即可正常工作。
内容的提问来源于stack exchange,提问作者krejale
相关产品推荐
相关产品推荐

