C# MAUI怎么实现双向绑定 MAUI TwoWay Binding教程

来源:这里教程网 时间:2026-02-21 17:41:20 作者:

MAUI 中实现双向绑定,核心是让 UI 控件和数据模型能互相自动更新:用户改输入框,模型值立刻变;代码改模型值,界面也立刻刷新。关键在三要素:绑定上下文(BindingContext)、绑定路径(Path),以及 BindingMode.TwoWay 显式声明。

1. 准备可通知的数据模型(INotifyPropertyChanged)

双向绑定要求模型能“告诉”界面自己变了。必须实现

INotifyPropertyChanged
接口,并在属性 setter 里触发
PropertyChanged
事件。

推荐用 C# 12 的

ObservableObject
(MAUI 内置)简化写法:

public partial class LoginViewModel : ObservableObject<br>
{<br>
    [ObservableProperty]<br>
    private string _username;<br><br>
    [ObservableProperty]<br>
    private string _password;<br>
}

上面代码自动生成带通知逻辑的

Username
Password
属性,无需手写
INotifyPropertyChanged

2. 在 XAML 中设置 TwoWay 绑定

绑定到控件时,显式指定

Mode=TwoWay
。不是所有控件默认支持双向,不写会退化为单向(OneWay)。

例如绑定到

Entry
Switch

<Entry Text="{Binding Username, Mode=TwoWay}" /><br>
<Entry Text="{Binding Password, Mode=TwoWay}" /><br>
<Switch IsToggled="{Binding RememberMe, Mode=TwoWay}" />

注意:

Text
IsToggled
IsChecked
SelectedItem
等属性才支持双向;
• 如果省略
Mode=TwoWay
,默认是
OneWay
(只响应模型变化,不反馈用户操作);
• 绑定前确保页面设置了
BindingContext
,比如在代码后台:
this.BindingContext = new LoginViewModel();

3. 验证绑定是否生效(调试小技巧)

常见问题:改了输入没更新模型?检查以下几点:

ViewModel 是否继承
ObservableObject
或正确实现
INotifyPropertyChanged
XAML 中绑定路径是否拼写一致(大小写敏感) 是否漏写
Mode=TwoWay
—— 尤其
Entry
默认是
OneWay
绑定上下文是否在页面加载完成前就已设置(建议在
OnAppearing
或构造函数末尾赋值)

可在 ViewModel 属性 setter 打断点或加日志,确认用户输入后是否被触发。

4. 进阶:使用 Binding Converter 处理类型转换

如果绑定类型不匹配(如把

int
绑定到
Text
),需用
IValueConverter
转换。但注意:双向绑定需要同时实现
Convert
ConvertBack

例如把布尔值转成“启用/禁用”文本:

public class BoolToTextConverter : IValueConverter<br>
{<br>
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =><br>
        (bool)value ? "启用" : "禁用";<br><br>
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =><br>
        value?.ToString() == "启用";<br>
}

在 XAML 中使用(记得设

Mode=TwoWay
):

<local:BoolToTextConverter x:Key="BoolToText" /><br>
...<br>
<Label Text="{Binding IsActive, Converter={StaticResource BoolToText}, Mode=TwoWay}" />

基本上就这些。重点就是:模型可通知 + XAML 显式写

Mode=TwoWay
+ 绑定上下文到位。不复杂但容易忽略细节。

相关推荐