MAUI中RadioButton靠GroupName属性显式分组实现互斥,必须设相同非空字符串值;通过RadioButtonGroup.SelectedValue绑定Value属性管理选中状态,初始选中由SelectedValue匹配Value决定,CheckedChanged事件仅响应用户点击。

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 这个显式门槛。










