I make a code sample with the part for the pre-selection or your reference.
Xaml:
<ContentPage.Content>
<CollectionView
x:Name="CategoryView"
Margin="10,0,10,0"
HeightRequest="700"
ItemsSource="{Binding classCategories}"
SelectedItems="{Binding SelectedCategories}"
SelectionChanged="CategoryView_SelectionChanged"
SelectionMode="Multiple">
<CollectionView.Footer>
<Button BackgroundColor="Transparent" HeightRequest="120" />
</CollectionView.Footer>
<CollectionView.ItemsLayout>
<GridItemsLayout
HorizontalItemSpacing="4"
Orientation="Vertical"
Span="2"
VerticalItemSpacing="1" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<!-- BackgroundColor="{Binding myBackGroundColor}" -->
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="33" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Source="{Binding Image}" />
<Label
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="13,0,0,0"
FontAttributes="Bold"
FontSize="19"
Text="{Binding Titolo}"
TextColor="White" />
<Image
Grid.Row="0"
Grid.Column="0"
Margin="13,5,0,0"
IsVisible="{Binding Vis}"
Source="pink.jpg" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
Code behind:
public partial class MainPage : ContentPage, INotifyPropertyChanged
{
public ObservableCollection<ClassCategory> classCategories { get; set; }
public ObservableCollection<object> SelectedCategories { get; set; }
public MainPage()
{
InitializeComponent();
classCategories = new ObservableCollection<ClassCategory>()
{
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Red", Titolo="A", Vis=true},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Green", Titolo="B", Vis=false},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Red", Titolo="A", Vis=true},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Green", Titolo="B", Vis=false},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Red", Titolo="A", Vis=true},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Green", Titolo="B", Vis=false},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Red", Titolo="A", Vis=true},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Green", Titolo="B", Vis=false},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Red", Titolo="A", Vis=true},
new ClassCategory{ Image="pink.jpg", myBackGroundColor="Green", Titolo="B", Vis=false},
};
SelectedCategories = new ObservableCollection<object>()
{
classCategories[0], classCategories[3]
};
this.BindingContext = this;
}
int i;
private void CategoryView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
i++;
if (i <= 2)//this event would be trigglled twice before you load the page
{
return;
}
else
{
// var selected = e.CurrentSelection;
// ClassCategory model = e.CurrentSelection.FirstOrDefault() as ClassCategory;
// WebClient clientw = new WebClient();
// clientw.Credentials = new NetworkCredential("account", "password");
// string Frasi1 = "ftp://[email protected]/htdocs/" + "Obiettivo" + ".json";
// string contents1 = await clientw.DownloadStringTaskAsync(Frasi1);
// ObservableCollection<FraseClass> FrasiJsonOnline1 = JsonConvert.DeserializeObject<ObservableCollection<FraseClass>>(contents1);
// Frasi.ItemsSource = FrasiJsonOnline1;
// ViewFrasi.IsVisible = true;
// model.myBackGroundColor = Color.Transparent;
// model.Vis = true;
// list.Clear();
// foreach (ClassCategory cat in selected)
// {
// list.Add(cat.Titolo);
// }
}
}
}
public class ClassCategory
{
public string myBackGroundColor { get; set; }
public string Image { get; set; }
public string Titolo { get; set; }
public bool Vis { get; set; }
}