.NET Maui:如何用单选按钮更新ObservableCollection中的单个项
问题根源
问题核心在于RadioButtonGroup的GroupName设置:所有轮播项的单选按钮都用了同一个固定的questiongroup组名,这会让所有Question实例的单选按钮归为同一个全局组。当你选中某个选项时,这个组的SelectedValue会同步更新所有绑定了该值的Answer属性——也就是集合里所有Question的Answer都会被修改。
Picker能正常工作是因为每个Picker都是独立控件,不存在全局组共享的问题。
修复方案
给每个Question项的RadioButtonGroup设置唯一的组名,确保每个组只对应当前Question实例。
快速修复(用现有Name属性)
直接把GroupName绑定到Question的Name(你的问题名称都是唯一的),替换XAML里的固定组名:
<StackLayout RadioButtonGroup.GroupName="{Binding Name}" RadioButtonGroup.SelectedValue="{Binding Answer}"> <RadioButton Content="OK" Value="OK" /> <RadioButton Content="Fail" Value="Fail" /> </StackLayout>
更健壮的方案(添加唯一ID)
如果未来可能出现重复的问题名称,给Question类加一个唯一ID字段更稳妥:
修改Model类:
using System.ComponentModel; using System.Runtime.CompilerServices; namespace TestMauiApp.Model { public class Question:INotifyPropertyChanged { public Guid Id { get; set; } = Guid.NewGuid(); // 新增唯一ID public string Name { get; set; } string answer; public string Answer { get => answer; set { answer = value; OnPropertyChanged(nameof(Answer)); } } public event PropertyChangedEventHandler PropertyChanged; void OnPropertyChanged([CallerMemberName] string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
对应修改XAML绑定:
<StackLayout RadioButtonGroup.GroupName="{Binding Id}" RadioButtonGroup.SelectedValue="{Binding Answer}"> <RadioButton Content="OK" Value="OK" /> <RadioButton Content="Fail" Value="Fail" /> </StackLayout>
效果验证
修改后,每个轮播项的单选按钮组都是独立的,选中选项时只会更新当前Question的Answer,不会影响其他项,和Picker的正常行为一致。
内容的提问来源于stack exchange,提问作者Aziel Arcila
相关产品推荐
相关产品推荐

