MAUI怎么进行数据绑定 MAUI DataBinding入门教程

MAUI数据绑定核心是可通知变化的数据源、BindingContext指定数据源、控件用{Binding xxx}声明绑定属性;推荐继承ObservableObject并用SetProperty实现INotifyPropertyChanged,BindingContext需在InitializeComponent()后设置,绑定表达式支持StringFormat和Mode=TwoWay。

MAUI 数据绑定核心就三点:有可通知变化的数据源、页面知道该用谁当数据源(BindingContext)、控件写清楚要绑哪个属性({Binding xxx})。不复杂但容易忽略细节。

准备一个会“说话”的 ViewModel

数据源必须能主动告诉界面“我变了”,否则界面永远卡在旧值。推荐继承 ObservableObject(来自 CommunityToolkit.Mvvm),它自动帮你处理 INotifyPropertyChanged:

  • 新建 ViewModels/MainPageViewModel.cs
  • 定义属性时用 SetProperty,不是直接赋值
  • 例如:private string _title = "欢迎"; public string Title { get => _title; set => SetProperty(ref _title, value); }

让页面认得这个 ViewModel

在页面的后台代码(MainPage.xaml.cs)里,把 ViewModel 实例设为 BindingContext:

  • public MainPage() { InitializeComponent(); BindingContext = new MainPageViewModel(); }
  • 也可以在 XAML 里设:(需先定义静态实例)
  • BindingContext 会向下继承——设在 StackLayout 上,它里面所有子控件都能用

在 XAML 里写绑定表达式

控件属性值写成 {Binding 属性名},系统自动找 BindingContext 里的对应属性:

  • → 显示 ViewModel 中的 Title 值
  • 支持格式化:Text="{Binding Value, StringFormat='当前值:{0:F1}'}"
  • 需要双向同步(比如输入框改完立刻更新 ViewModel)加 Mode=TwoWay

常见问题快速避坑

刚上手容易卡在这几个地方:

  • 属性没变?→ 检查 ViewModel 是否真继承了 ObservableObject 或手动触发 PropertyChanged
  • 绑定没生效?→ 确认 BindingContext 设置时机(不能晚于 InitializeComponent()),且控件属性本身是可绑定属性(如 Label.Text 是,但自定义普通 C# 属性不行)
  • 想绑多个控件到同一个 Slider?→ 用 {x:Reference slider} 直接指定源,不用依赖 BindingContext:Text="{Binding Source={x:Reference slider}, Path=Value}"

基本上就这些。跑通一次单向绑定,再加 Mode=TwoWay 和简单验证,你就已经踩进 MVVM 的正门了。