Предварительный выбор в представлении коллекции из исходного кода без привязки

#c# #xaml #xamarin.forms

#c# #xaml #xamarin.forms

Вопрос:

Я не могу сделать некоторые элементы выбранными в CollectionView. Я пытаюсь добавить предварительно выбранные элементы в CollectionView с помощью code-behind, но приложение выдает мне исключение

Это мой код XAML

 <CollectionView               
            x:Name="CategoryView" 
            ItemsSource="{Binding list}" 
            Margin="10,0,10,0"
            SelectionMode="Multiple"
            SelectionChanged="CategoryView_SelectionChanged">
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical" Span="2" VerticalItemSpacing="15" HorizontalItemSpacing="3"/>
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid RowSpacing="0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25"/>
                            <RowDefinition/>
                            <RowDefinition Height="150"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="2*"/>
                        </Grid.ColumnDefinitions>

                        <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Titolo}" FontSize="19" FontAttributes="Bold" TextColor="Black" Margin="13,0,0,0"/>
                        <!--Label Grid.Row="1" Grid.Column="0"  Text="{Binding Descrizione}" FontSize="12" TextColor="Black" Margin="13,0,0,0"/-->
                        <Image Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Source="{Binding Image}"/>
                        <Image Grid.Row="2" Grid.Column="0" VerticalOptions="Start" Source="checked.png" IsVisible="{Binding IsVis}"  Margin="20,10,0,0"/>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
 

Это мой код на c #:

 List<string> list = new List<string>();
....
listCat = new ObservableCollection<ClassCategory>
        {
            new ClassCategory {ID=1, Titolo=set.Obiettivi, Image="CatObiettivo.png", Descrizione="Il miglior modo per raggiungere i propri obiettivi"},
            new ClassCategory {ID=2, Titolo=set.Ambizioni, Image="CatAmbizione.png", Descrizione="Chi ha ambizioni e non vuole perdere la motivazione"},
            new ClassCategory {ID=3, Titolo=set.Amicizia, Image="CatAmicizia.png", Descrizione="Una celebrazione all'amiciza"},
            new ClassCategory {ID=4, Titolo=set.Felicita, Image="CatFelicita.png"},
            new ClassCategory {ID=5, Titolo=set.Tempo, Image="CatTempo.png"},
            new ClassCategory {ID=6, Titolo=set.Umore, Image="CatUmore.png"},
            new ClassCategory {ID=7, Titolo=set.Coraggio, Image="CatCoraggio.png"},
            new ClassCategory {ID=8, Titolo=set.Intelligenza, Image="CatIntelligenza.png"},
            new ClassCategory {ID=9, Titolo=set.Sogno, Image="CatSogno.png"},
            new ClassCategory {ID=10, Titolo=set.Cambiamento, Image="CatCambiamento.png"},
            new ClassCategory {ID=11, Titolo=set.Abitudine},
            new ClassCategory {ID=12, Titolo=set.Perdono, Image="CatPerdono.png"},
            new ClassCategory {ID=13, Titolo=set.Ansia, Image="CatAnsia.png"},
            new ClassCategory {ID=14, Titolo=set.Autostima},
            new ClassCategory {ID=15, Titolo=set.Ricchezza, Image="CatRicchezza.png"},
            new ClassCategory {ID=16, Titolo=set.Procastinare},
            new ClassCategory {ID=17, Titolo=set.CapireDonne, Image="CatDonne.png"},
            new ClassCategory {ID=18, Titolo=set.CapireUomini, Image="CatUomini.png"},
            new ClassCategory {ID=19, Titolo=set.Amore, Image="CatAmore.png"},
            new ClassCategory {ID=20, Titolo=set.Amarsi},
            new ClassCategory {ID=21, Titolo=set.Leader, Image="CatLeader.png"},
            new ClassCategory {ID=22, Titolo=set.Vivere},
            new ClassCategory {ID=23, Titolo=set.Benessere, Image="CatBenessere.png"},
            new ClassCategory {ID=24, Titolo=set.Solitudine, Image="CatSolitudine.png"},
        };

        CategoryView.ItemsSource = listCat;

        foreach (string sr in list)
        {
            
            var ObjFinded = listCat.First(s => s.Titolo.Contains(sr));
            var Index = listCat.IndexOf(ObjFinded);
            CategoryView.SelectedItems.Add(listCat[Index]);
        }
 

Это исключение возникает, когда я пытаюсь добавить элементы внутри цикла foreach

Система.Сообщение InvalidOperationException=Коллекция была изменена; операция перечисления может не выполняться.

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

1. попробуйте создать временный список объектов для добавления, а затем добавить их после завершения цикла

2. Проблема решена! Спасибо