更新 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 中的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章
选择器 ItemSource 值未绑定在 XAML ListView 中