更新 Listview itemsource 在 Xamarin 表单中清除其中的单选按钮控件

Posted

技术标签:

【中文标题】更新 Listview itemsource 在 Xamarin 表单中清除其中的单选按钮控件【英文标题】:Updating Listview itemsource clears radiobutton control inside it in Xamarin forms 【发布时间】:2021-11-16 11:40:13 【问题描述】:

我在 Xamarin 表单中有一个简单的列表视图。定义如下。

<ListView x:Name="lvRadio" Grid.Row="1"
           SeparatorVisibility="None"             
           VerticalOptions="CenterAndExpand"
                                      HorizontalOptions="StartAndExpand" HasUnevenRows="True" BackgroundColor="#ffffff"
                                       HeightRequest="300">
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <ViewCell>
                                            <StackLayout BackgroundColor="White">
                                                <RadioButton   BackgroundColor="#ffffff"
                                                                                 Content="Binding Description" 
                                                                                 FontFamily="Roboto" FontSize="16" TextColor="Black"
                                                                                 ></RadioButton>
                                            </StackLayout>
                                        </ViewCell>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>

在后面的代码中,我将列表视图绑定如下

            List<CommonModel> temp = new List<CommonModel>();
            CommonModel model;

            model = new CommonModel();
            model.Description = "Radio 1";
            temp.Add(model);

            model = new CommonModel();
            model.Description = "Radio 2";
            temp.Add(model);

            model = new CommonModel();
            model.Description = "Radio 3";
            temp.Add(model);

            lvRadio.ItemsSource = null;
            lvRadio.ItemsSource = temp;

现在,当我更新 ItemsSource 时,所有单选按钮都丢失了。 任何帮助将不胜感激。

【问题讨论】:

“所有单选按钮都丢失”是什么意思? Listview 不呈现任何单选按钮 【参考方案1】:

当您使用 lvRadio.ItemsSource = null;lvRadio.ItemsSource = temp;

会导致listview的所有值都被修改,所以会有问题。

有两种解决方案:

    修改ListView为ObservableCollection

    删除 lvRadio.ItemsSource= null;lvRadio.ItemsSource = temp;

    这样每次修改temp的值,界面都会 自动地 填充,原始值不会被修改。

    RadioButton 有一个 IsChecked 属性来记录是否 RadioButton 被选中,因此您可以向 CommonModel 来记录 IsChecked 是否被选中。然后使用 IsChecked="Binding xxx"

这是第一个解决方案的cs页面代码:

public partial class MainPage : ContentPage

    ObservableCollection<CommonModel> temp = new ObservableCollection<CommonModel>();
    CommonModel model;
    public MainPage()
    
        InitializeComponent();
        lvRadio.ItemsSource = temp;
    
    private void Button_Clicked(object sender, EventArgs e)
    
        model = new CommonModel();
        model.Description = "Radio 1";
        temp.Add(model);
        model = new CommonModel();
        model.Description = "Radio 2";
        temp.Add(model);
        model = new CommonModel();
        model.Description = "Radio 3";
        temp.Add(model);
    

截图如下:

【讨论】:

以上是关于更新 Listview itemsource 在 Xamarin 表单中清除其中的单选按钮控件的主要内容,如果未能解决你的问题,请参考以下文章

在ListView.ItemSource中点按发射命令。

在ListView.ItemSource中点按发射命令。

选择器 ItemSource 值未绑定在 XAML ListView 中

在 ViewModel 中设置时 ListView SelectedItem 未突出显示

在更新绑定源期间冻结 wpf 应用程序

Xamarin.Forms:获取列表视图的所有单元格/项目