#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. Проблема решена! Спасибо