Обновление Listview itemsource очищает radiobutton в формах Xamarin

#listview #xamarin.forms #observablecollection

Вопрос:

Я определил представление списка и 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"/>  

Ниже приведен код в классе codebehind

 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

Now when i click on Delete button the listview becomes empty. Up till this point everything is working fine.

Now when i click on Add button the listview does not show Radiobutton and shows only amount. Following is the screen shot

Screen2

Now when i again click on Add button i see radio button and amount both on 2nd row. Following is the screenshot

Экран 3

Может ли кто-нибудь объяснить мне, почему переключатель не отображается в первом ряду.

Ответ №1:

Я попытался восстановить ваш код и повторить вашу операцию. После удаления радиобуттона я снова нажал кнопку «Добавить», и результат был добавлен в обычном режиме. Поэтому я предоставляю код для вашей справки.

Это мой последний код

Вот код 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>  

Комментарии:

1. Привет, Вэнь, я обновил свой пост скриншотами.

2. Похоже, он появляется только в ios, я попытался использовать CollectionView вместо ListView, чтобы успешно решить проблему.

3. Если я использую CollectionView, я получаю нулевую ссылку на ошибку temp.Add(модель); строка

4. Вам нужно заменить все просмотры списков на просмотры коллекций и удалить ячейки просмотра, а остальные не изменяются.

5. Я обновил свой код, и он работает нормально.