#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); } }
Когда я запускаю приложение и нажимаю кнопку добавить, я вижу следующий вывод.
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
Now when i again click on Add button i see radio button and amount both on 2nd row. Following is the screenshot
Может ли кто-нибудь объяснить мне, почему переключатель не отображается в первом ряду.
Ответ №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. Я обновил свой код, и он работает нормально.