added cm7 files (databinding)

test_old_branch
Jules LASCRET 11 months ago
parent a86a39cbb1
commit a795e5b986

@ -0,0 +1,28 @@
// DataBinding Baby !!
// Applcation se basant sur le site wtatennis.com
// class : Player, Place (Birth Places), Manager, IPersistanceManager
// enum : Hand (lfet-handed or right-handed)
// Player.cs
public string FirstName
{
get => firstName;
set
{
if(value == firstName) return;
firstName = value;
OnPropertyChanged();
}
}
private string firstName;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

@ -0,0 +1,41 @@
<!-- Player Page -->
<Grid ColumnDefinition="*, *" RowDefinition="Auto, *">
<Grid BackgroundColor="Blue">
<VerticalStackLayout>
<Label Text="Ranking"/>
<Label Text="{Binding Rank}"/>
<Label Text="Singles"/>
</VerticalStackLayout>
</Grid>
<Grid BackgroundColor="Blue" Grid.Column="1">
<VerticalStackLayout>
<Entry Text="{Binding Player.FirstName, Mode=OneWayToSource}"/>
<Label Text="{Binding Player.FirstName}, Mode=(OneWay, TwoWay, OneWayToSource)"/> <!-- Automatically subscribed to the source's property change -->
<Label Text="{Binding Player.LastName}"/>
<Label Text="{Binding Player.Height, StringFormat=\{0\}m}"/>
<Button Text="=>" Clicked="ButtonClicked"/>
</VerticalStackLayout>
</Grid>
<Image Grid.RowSpan="2" Source="{Binding Player.ImageLarge}"/>
</Grid>
<!-- =================== -->
<!-- Players Page -->
<ListView ItemsSource="{Binding Players}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<HorizontalStackLayout>
<Label Text="{Binding FirstName}"/>
<Label Text="{Binding LastName}"/>
<Label Text="{Binding Points}"/>
</HorizontalStackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<!-- =================== -->

@ -0,0 +1,80 @@
// Code Behind for PlayerPage
public partial class PlayerPage : ContentPage
{
public Manager Mgr { get; set; } = new Manager(new Stub());
public int PlayerIndex { get; set; } = 0;
public RankedPlayer RankedPlayer { get; set; }
public PlayerPage()
{
Mgr.LoadPlayers();
InitializeComponent();
RankedPlayer = new RankedPlayer(Mgr.Players.ElementAt(2), Mgr);
BindingContext = RankedPlayer;
}
public void ButtonClicked(object sender, EventArgs e)
{
PlayerIndex++;
RankedPlayer.Player = Mgr.Players.ElementAt(PlayerIndex); // Source's property changed, not the source itself
}
}
public class RankedPlayer : INotifyPropertyChanged
{
public RankedPlayer(Player player, Manager mgr)
{
Mgr = mgr;
Player = player;
}
private Manager Mgr { get; set; }
public Player thePlayer
{
get => thePlayer;
set
{
if(value == thePlayer) return;
thePlayer = value;
OnPropertyChanged("ThePlayer");
OnPropertyChanged(nameof(Rank));
}
}
private Player thePlayer;
public int Rank => Mgr.Players.OrderingByDescending(p => p.Points).ToList().IndexOf(Player) + 1;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
// ===============================
// Code behind for Players Page
public partial class PlayersPage : ContentPage
{
public Manager Mgr { get; set; } = new Manager(new Stub());
public PlayersPage()
{
Mgr.LoadPlayers();
InitializeComponent();
BindingContext = Mgr;
}
}
// ===============================
Loading…
Cancel
Save