更新 Listview itemsource 清除 Xamarin Forms 中的单选按钮

Posted

技术标签:

【中文标题】更新 Listview itemsource 清除 Xamarin Forms 中的单选按钮【英文标题】:Updating Listview itemsource clears radiobutton in Xamarin Forms 【发布时间】:2021-12-02 03:55:22 【问题描述】:

我已经定义了一个列表视图和 2 个按钮,如下所示。

<ListView x:Name="lvTest" SeparatorVisibility="None" VerticalOptions="CenterAndExpand"
                              HorizontalOptions="StartAndExpand" HasUnevenRows="True" BackgroundColor="#ffffff">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition></ColumnDefinition>
                                <ColumnDefinition></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <RadioButton Padding="10,0,0,0" Grid.Column="0" BackgroundColor="White" TextColor="Black"
                                         GroupName="L1" Content="Binding Description"
                                         ></RadioButton>
                            <Label Grid.Column="1" Text="Binding Amount" TextColor="Black" BackgroundColor="White"
                                   HorizontalTextAlignment="End" Padding="0,0,10,0"></Label>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <Button x:Name="btnAdd" Clicked="btnAdd_Clicked" Text="Add"/>
        <Button x:Name="btnRemove" Clicked="btnRemove_Clicked" Text="Delete"/>

以下是代码隐藏类中的代码

public partial class Listview : ContentPage

    ObservableCollection<CommonModel> temp = new ObservableCollection<CommonModel>();
    CommonModel model;
    public Listview()
    
        InitializeComponent();
        lvTest.ItemsSource = temp;
    

    void btnAdd_Clicked(System.Object sender, System.EventArgs e)
    
        model = new CommonModel();
        model.Description = "Radio 1";
        model.Amount = 100;
        temp.Add(model);
    

    void btnRemove_Clicked(System.Object sender, System.EventArgs e)
    
        temp.RemoveAt(0);
    

当我运行应用程序并单击添加按钮时,我会看到以下输出。

现在,当我单击删除按钮时,列表视图变为空。 到目前为止一切正常。

现在,当我单击添加按钮时,列表视图不显示单选按钮并且只显示数量。以下是截图

现在,当我再次单击“添加”按钮时,我会在第二行看到单选按钮和金额。以下是截图

谁能指导我为什么单选按钮没有出现在第一行。

【问题讨论】:

【参考方案1】:

我尝试恢复您的代码并重复您的操作。删除RadioButton后,再次点击添加按钮,结果添加正常。所以我提供代码供大家参考。

这是我最新的代码

这是cs代码:

public partial class MainPage : ContentPage

    ObservableCollection<CommonModel> temp = new ObservableCollection<CommonModel>();
    CommonModel model;
    public MainPage()
    
        InitializeComponent();
        lvTest.ItemsSource = temp;
    

    void btnAdd_Clicked(System.Object sender, System.EventArgs e)
    
        model = new CommonModel();
        model.Description = temp.Count + "Radio";
        model.Amount = 100;
        temp.Add(model);
        lvTest.ItemsSource = temp;
    

    void btnRemove_Clicked(System.Object sender, System.EventArgs e)
    
        temp.RemoveAt(0);
    

这里是 xaml 代码:

<StackLayout>
    <CollectionView x:Name="lvTest" VerticalOptions="CenterAndExpand"
                          HorizontalOptions="StartAndExpand"  BackgroundColor="#ffffff">
        <CollectionView.ItemTemplate>
            <DataTemplate >
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <RadioButton Padding="10,0,0,0" GroupName="L1" BackgroundColor="White" TextColor="Black"
                                      Content="Binding Description"
                                     ></RadioButton>
                        <Label Grid.Column="1" Text="Binding Amount" TextColor="Black" BackgroundColor="White" HorizontalOptions="End" Padding="0,0,10,0"> </Label>
                    </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
    <Button x:Name="btnAdd" Clicked="btnAdd_Clicked" Text="Add"/>
    <Button x:Name="btnRemove" Clicked="btnRemove_Clicked" Text="Delete"/> 
</StackLayout>

【讨论】:

你好文,我已经用截图更新了我的帖子。 好像只出现在ios,我尝试用CollectionView代替ListView成功解决问题。 如果我使用 CollectionView 我在 temp.Add(model) 上得到 NULL 引用错误;行 你需要将所有ListViews替换成CollectionViews并删除ViewCells,其余不变。 我已经更新了我的代码,它可以正常工作了。

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

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

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

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

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

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

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