Hi All,
I have a problem with a collection view, I need simply that when my collection view is populated then select one item this is my code
ViewModel
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using MerkurWinApp.Models;
using MerkurWinApp.Services;
using MerkurWinApp.Views;
using Newtonsoft.Json;
using Xamarin.Forms;
namespace MerkurWinApp.ViewModels
{
public class BetViewModel: BaseViewModel
{
public event PropertyChangedEventHandler PropertyChangedBet;
private ObservableCollection _sportsBet;
public Command LoadTournamentsNavigation { get; set; }
public BetViewModel()
{
Title = "Scommesse";
_sportsBet = new ObservableCollection<Sport>();
LoadTournamentsNavigation = new Command(async () => await ExecuteLoadTournamentsNavigation());
}
public ObservableCollection<Sport> SportsBet
{
get
{
return _sportsBet;
}
set
{
if (_sportsBet != value)
{
_sportsBet = value;
OnPropertyChanged(new PropertyChangedEventArgs("SportsBet"));
}
}
}
Sport selectedSportBet;
public Sport SelectedSportBet
{
get
{
return selectedSportBet;
}
set
{
SetProperty(ref selectedSportBet, value);
OnPropertyChanged(new PropertyChangedEventArgs("SelectedSportBet"));
}
}
async public Task ExecuteLoadTournamentsNavigation()
{
if (IsBusy)
return;
IsBusy = true;
RestService rest = new RestService(false);
var result = await rest.GetDataAsync(Endpoints.TournamentTree);
if (!result.ContainsKey("result"))
{
try
{
SportsAamsList _sportsAams = new SportsAamsList();
var assembly = typeof(MainPage).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{"SportsAAMS.json"}");
using (var reader = new System.IO.StreamReader(stream))
{
var jsonString = reader.ReadToEnd();
_sportsAams = JsonConvert.DeserializeObject<SportsAamsList>(jsonString);
}
var json = JsonConvert.SerializeObject(result);
var res = JsonConvert.DeserializeObject<TournamentsTree>(json.ToString());
_sportsBet.Clear();
foreach (KeyValuePair<string, Sport> row in res.Sports)
{
SportsAams v = _sportsAams.sportsAamsList.Find(x => x.SportName == row.Value.Name);
if (v != null)
{
row.Value.IconName = v.IconName;
}
int numBadge = 0;
foreach (var cat in row.Value.Categories)
{
numBadge += cat.Value.Tournaments.Count;
}
row.Value.BadgeCount = numBadge.ToString();
_sportsBet.Add(row.Value);
}
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
finally
{
IsBusy = false;
}
}
}
private void OnPropertyChanged(PropertyChangedEventArgs eventArgs)
{
PropertyChangedBet?.Invoke(this, eventArgs);
}
}
}
Page
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using MerkurWinApp.Models;
using MerkurWinApp.ViewModels;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace MerkurWinApp.Views
{
public partial class BetPage : ContentPage
{
BetViewModel viewModel;
public BetPage()
{
InitializeComponent();
BindingContext = viewModel = new BetViewModel();
}
protected override void OnAppearing()
{
base.OnAppearing();
if (viewModel.SportsBet.Count == 0)
{
viewModel.LoadTournamentsNavigation.Execute(null);
}
}
void MainNavigation_SelectionChanged(System.Object sender, Xamarin.Forms.SelectionChangedEventArgs e)
{
var previous = e.PreviousSelection as ContentView;
var current = e.CurrentSelection as ContentView;
}
}
}
XAML
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage.ToolbarItems>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<ListView.ItemTemplate>
</ListView.ItemTemplate>
</ContentPage.Content>
Please can you help me?
Thanks.