MAUI 中的 RadioButton 不像传统平台那样依赖容器分组(如 Android 的 RadioGroup 或 Qt 的父控件自动互斥),而是靠 GroupName 属性显式定义逻辑分组,同一组内自动互斥——这是最核心的使用前提。
分组必须用 GroupName
多个 RadioButton 要实现单选,必须给它们设置相同的 GroupName 值。这个值是字符串,区分大小写,且不能为空。没有 GroupName 的 RadioButton 是独立的,不参与任何互斥逻辑。
推荐在 XAML 中统一写在父布局上,用附加属性方式批量设置:RadioButtonGroup.GroupName="gender"每个 RadioButton 自己也支持
GroupName="gender",但分散写容易遗漏或不一致 不同组可用不同名称,比如
"gender"和
"role",彼此完全隔离
获取和绑定选中值
MAUI 不直接暴露“哪个 RadioButton 被选中”,而是通过 RadioButtonGroup.SelectedValue 统一管理。它会自动同步为当前被选中项的
Value属性值(类型为 object,通常用 string)。 在 ViewModel 中定义一个 string 类型属性(如
SelectedGender),并双向绑定到
RadioButtonGroup.SelectedValue每个 RadioButton 设置
Value="Male"、
Value="Female"等,值要与绑定属性类型兼容 用户点击后,
SelectedGender自动更新,无需手动监听事件
默认选中和初始状态
默认选中不是靠
IsChecked="True"(该属性在 MAUI RadioButton 中只读,设了也没用),而是靠 让 SelectedValue 初始值匹配某个 RadioButton 的 Value。 例如 ViewModel 中写:
[ObservableProperty] string selectedGender = "Male";XAML 中对应 RadioButton 的
Value="Male",启动时就会自动高亮它 如果初始值不匹配任何 Value,所有 RadioButton 都不显示选中态(合法状态,不代表出错)
响应变化和触发逻辑
虽然绑定 SelectedValue 已覆盖大部分场景,但有时仍需监听变化时机。MAUI 提供 CheckedChanged 事件,注意它只在用户主动点击时触发,程序赋值不会触发。
XAML 中写:CheckedChanged="OnGenderChanged"后台代码中可做即时反馈,比如:
if (e.Value) { DisplayAlert("提示", $"你选了{((RadioButton)sender).Content}", "确定"); }
更推荐优先用 MVVM + 属性变更通知,事件仅用于轻量 UI 反馈或调试
基本上就这些。关键就是 GroupName 统一分组、Value 对齐 SelectedValue、靠绑定驱动状态,不复杂但容易忽略 GroupName 这个显式门槛。
