You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:55:39