1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-30 15:06:06 +00:00

Refactor view models

This commit is contained in:
Yan Maniez 2019-04-17 22:47:17 +02:00
parent bb89a212b6
commit cc0f0ef161
5 changed files with 151 additions and 151 deletions

View file

@ -0,0 +1,20 @@
using AideDeJeuLib;
using System.Collections.Generic;
namespace AideDeJeu.ViewModels.PlayerCharacter
{
public class ClassViewModel : BaseViewModel
{
public ClassItem Class { get; set; }
public SubClassItem SubClass { get; set; }
public ClassHitPointsItem HitPoints { get; set; }
public ClassProficienciesItem Proficiencies { get; set; }
public ClassEquipmentItem Equipment { get; set; }
public ClassEvolutionItem Evolution { get; set; }
public List<ClassFeatureItem> Features { get; set; }
public string Name { get { return Class?.Name; } }
public string Description { get { return Class?.Description; } }
public string Markdown { get { return Class?.Markdown; } }
}
}

View file

@ -150,95 +150,21 @@ namespace AideDeJeu.ViewModels.PlayerCharacter
#region Race #region Race
public NotifyTaskCompletion<List<RaceViewModel>> Races { get; private set; } public NotifyTaskCompletion<List<RaceViewModel>> Races { get; private set; }
private int _RaceSelectedIndex = -1;
public int RaceSelectedIndex
{
get
{
return _RaceSelectedIndex;
}
set
{
SetProperty(ref _RaceSelectedIndex, value);
if (Races.Result.Count > _RaceSelectedIndex && _RaceSelectedIndex >= 0)
{
SelectedRace = Races.Result[_RaceSelectedIndex];
}
}
}
private RaceViewModel _SelectedRace = null;
public RaceViewModel SelectedRace
{
get
{
return _SelectedRace;
}
set
{
SetProperty(ref _SelectedRace, value);
//SelectedPlayerCharacter.Race = _SelectedRace;
}
}
public class RaceViewModel : BaseViewModel //private RaceViewModel _SelectedRace = null;
{ //public RaceViewModel SelectedRace
public RaceItem Race { get; set; } //{
public SubRaceItem SubRace { get; set; } // get
// {
// return _SelectedRace;
// }
// set
// {
// SetProperty(ref _SelectedRace, value);
// //SelectedPlayerCharacter.Race = _SelectedRace;
// }
//}
private RaceItem RaceOrSubRace { get { return SubRace ?? Race; } }
public string Name { get { return RaceOrSubRace.Name; } }
public string Description { get { return RaceOrSubRace.Description; } }
public string NewId { get { return RaceOrSubRace.NewId; } }
public string Id { get { return RaceOrSubRace.Id; } }
public string RootId { get { return RaceOrSubRace.RootId; } }
public string AbilityScoreIncrease
{
get
{
if(SubRace?.AbilityScoreIncrease != null)
{
return Race.AbilityScoreIncrease + "\n\n" + SubRace.AbilityScoreIncrease;
}
return Race.AbilityScoreIncrease;
}
}
public OrderedDictionary Attributes
{
get
{
if(SubRace == null)
{
return Race.Attributes;
}
var dico = new OrderedDictionary();
foreach(DictionaryEntry attr in Race.Attributes)
{
dico[attr.Key] = attr.Value;
}
foreach (DictionaryEntry attr in SubRace.Attributes)
{
dico[attr.Key] = attr.Value;
}
return dico;
}
}
public virtual OrderedDictionary AttributesKeyValue
{
get
{
return AideDeJeuLib.ItemAttribute.ExtractKeyValues(Attributes);
}
}
public string Age { get { return Race.Age; } }
public string Alignment { get { return Race.Alignment; } }
public string Size { get { return Race.Size; } }
public string Speed { get { return Race.Speed; } }
public string Darkvision { get { return Race.Darkvision; } }
public string Languages { get { return Race.Languages; } }
}
public async Task<List<RaceViewModel>> LoadRacesAsync() public async Task<List<RaceViewModel>> LoadRacesAsync()
{ {
using (var context = await StoreViewModel.GetLibraryContextAsync()) using (var context = await StoreViewModel.GetLibraryContextAsync())
@ -269,47 +195,32 @@ namespace AideDeJeu.ViewModels.PlayerCharacter
#region Class #region Class
public NotifyTaskCompletion<List<ClassViewModel>> Classes { get; private set; } public NotifyTaskCompletion<List<ClassViewModel>> Classes { get; private set; }
private int _ClassSelectedIndex = -1; //private int _ClassSelectedIndex = -1;
public int ClassSelectedIndex //public int ClassSelectedIndex
{ //{
get // get
{ // {
return _ClassSelectedIndex; // return _ClassSelectedIndex;
} // }
set // set
{ // {
SetProperty(ref _ClassSelectedIndex, value); // SetProperty(ref _ClassSelectedIndex, value);
SelectedClass = Classes.Result[_ClassSelectedIndex]; // SelectedClass = Classes.Result[_ClassSelectedIndex];
} // }
} //}
private ClassViewModel _SelectedClass = null; //private ClassViewModel _SelectedClass = null;
public ClassViewModel SelectedClass //public ClassViewModel SelectedClass
{ //{
get // get
{ // {
return _SelectedClass; // return _SelectedClass;
} // }
set // set
{ // {
SetProperty(ref _SelectedClass, value); // SetProperty(ref _SelectedClass, value);
//SelectedPlayerCharacter.Class = _SelectedClass; // //SelectedPlayerCharacter.Class = _SelectedClass;
} // }
} //}
public class ClassViewModel : BaseViewModel
{
public ClassItem Class { get; set; }
public SubClassItem SubClass { get; set; }
public ClassHitPointsItem HitPoints { get; set; }
public ClassProficienciesItem Proficiencies { get; set; }
public ClassEquipmentItem Equipment { get; set; }
public ClassEvolutionItem Evolution { get; set; }
public List<ClassFeatureItem> Features { get; set; }
public string Name { get { return Class?.Name; } }
public string Description { get { return Class?.Description; } }
public string Markdown { get { return Class?.Markdown; } }
}
public async Task<List<ClassViewModel>> LoadClassesAsync() public async Task<List<ClassViewModel>> LoadClassesAsync()
{ {

View file

@ -19,8 +19,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter
SetProperty(ref _Alignment, value); SetProperty(ref _Alignment, value);
} }
} }
private RaceItem _Race = null; private RaceViewModel _Race = null;
public RaceItem Race public RaceViewModel Race
{ {
get get
{ {
@ -31,8 +31,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter
SetProperty(ref _Race, value); SetProperty(ref _Race, value);
} }
} }
private ClassItem _Class = null; private ClassViewModel _Class = null;
public ClassItem Class public ClassViewModel Class
{ {
get get
{ {

View file

@ -0,0 +1,69 @@
using AideDeJeuLib;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
namespace AideDeJeu.ViewModels.PlayerCharacter
{
public class RaceViewModel : BaseViewModel
{
public RaceItem Race { get; set; }
public SubRaceItem SubRace { get; set; }
private RaceItem RaceOrSubRace { get { return SubRace ?? Race; } }
public string Name { get { return RaceOrSubRace.Name; } }
public string Description { get { return RaceOrSubRace.Description; } }
public string NewId { get { return RaceOrSubRace.NewId; } }
public string Id { get { return RaceOrSubRace.Id; } }
public string RootId { get { return RaceOrSubRace.RootId; } }
public string AbilityScoreIncrease
{
get
{
if (SubRace?.AbilityScoreIncrease != null)
{
return Race.AbilityScoreIncrease + "\n\n" + SubRace.AbilityScoreIncrease;
}
return Race.AbilityScoreIncrease;
}
}
public OrderedDictionary Attributes
{
get
{
if (SubRace == null)
{
return Race.Attributes;
}
var dico = new OrderedDictionary();
foreach (DictionaryEntry attr in Race.Attributes)
{
dico[attr.Key] = attr.Value;
}
foreach (DictionaryEntry attr in SubRace.Attributes)
{
dico[attr.Key] = attr.Value;
}
return dico;
}
}
public virtual OrderedDictionary AttributesKeyValue
{
get
{
return AideDeJeuLib.ItemAttribute.ExtractKeyValues(Attributes);
}
}
public string Age { get { return Race.Age; } }
public string Alignment { get { return Race.Alignment; } }
public string Size { get { return Race.Size; } }
public string Speed { get { return Race.Speed; } }
public string Darkvision { get { return Race.Darkvision; } }
public string Languages { get { return Race.Languages; } }
}
}

View file

@ -22,31 +22,31 @@
<ContentPage Title="Race"> <ContentPage Title="Race">
<ScrollView Orientation="Vertical"> <ScrollView Orientation="Vertical">
<StackLayout> <StackLayout>
<views:ItemPickerView BindingContext="{Binding}" Title="Race" ItemsSource="{Binding Races.Result}" SelectedItem="{Binding SelectedRace, Mode=TwoWay}" IsEnabled="{Binding Races.IsSuccessfullyCompleted}" /> <views:ItemPickerView BindingContext="{Binding}" Title="Race" ItemsSource="{Binding Races.Result}" SelectedItem="{Binding SelectedPlayerCharacter.Race, Mode=TwoWay}" IsEnabled="{Binding Races.IsSuccessfullyCompleted}" />
<!--<Picker Title="Race" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Races.IsSuccessfullyCompleted}" ItemsSource="{Binding Races.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding RaceSelectedIndex, Mode=TwoWay}" />--> <!--<Picker Title="Race" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Races.IsSuccessfullyCompleted}" ItemsSource="{Binding Races.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding RaceSelectedIndex, Mode=TwoWay}" />-->
<Frame BorderColor="Black" Padding="2" Margin="10" IsVisible="{Binding SelectedRace, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" > <Frame BorderColor="Black" Padding="2" Margin="10" IsVisible="{Binding SelectedPlayerCharacter.Race, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" >
<StackLayout Padding="0"> <StackLayout Padding="0">
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Augmentation de caractéristiques" IsVisible="{Binding SelectedRace.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Augmentation de caractéristiques" IsVisible="{Binding SelectedPlayerCharacter.Race.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.AbilityScoreIncrease}" IsVisible="{Binding SelectedRace.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.AbilityScoreIncrease}" IsVisible="{Binding SelectedPlayerCharacter.Race.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Âge" IsVisible="{Binding SelectedRace.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Âge" IsVisible="{Binding SelectedPlayerCharacter.Race.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Age}" IsVisible="{Binding SelectedRace.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Age}" IsVisible="{Binding SelectedPlayerCharacter.Race.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Alignement" IsVisible="{Binding SelectedRace.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Alignement" IsVisible="{Binding SelectedPlayerCharacter.Race.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Alignment}" IsVisible="{Binding SelectedRace.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Alignment}" IsVisible="{Binding SelectedPlayerCharacter.Race.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Taille" IsVisible="{Binding SelectedRace.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Taille" IsVisible="{Binding SelectedPlayerCharacter.Race.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Size}" IsVisible="{Binding SelectedRace.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Size}" IsVisible="{Binding SelectedPlayerCharacter.Race.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vitesse" IsVisible="{Binding SelectedRace.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vitesse" IsVisible="{Binding SelectedPlayerCharacter.Race.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Speed}" IsVisible="{Binding SelectedRace.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Speed}" IsVisible="{Binding SelectedPlayerCharacter.Race.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vision dans le noir" IsVisible="{Binding SelectedRace.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vision dans le noir" IsVisible="{Binding SelectedPlayerCharacter.Race.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Darkvision}" IsVisible="{Binding SelectedRace.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Darkvision}" IsVisible="{Binding SelectedPlayerCharacter.Race.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<StackLayout BindableLayout.ItemsSource="{Binding SelectedRace.AttributesKeyValue}"> <StackLayout BindableLayout.ItemsSource="{Binding SelectedPlayerCharacter.Race.AttributesKeyValue}">
<BindableLayout.ItemTemplate> <BindableLayout.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackLayout> <StackLayout>
@ -57,8 +57,8 @@
</BindableLayout.ItemTemplate> </BindableLayout.ItemTemplate>
</StackLayout> </StackLayout>
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Langues" IsVisible="{Binding SelectedRace.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Langues" IsVisible="{Binding SelectedPlayerCharacter.Race.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Languages}" IsVisible="{Binding SelectedRace.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Race.Languages}" IsVisible="{Binding SelectedPlayerCharacter.Race.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
</StackLayout> </StackLayout>
</Frame> </Frame>
@ -69,9 +69,9 @@
<ContentPage Title="Classe"> <ContentPage Title="Classe">
<ScrollView Orientation="Vertical"> <ScrollView Orientation="Vertical">
<StackLayout> <StackLayout>
<views:ItemPickerView BindingContext="{Binding}" Title="Classe" ItemsSource="{Binding Classes.Result}" SelectedItem="{Binding SelectedClass, Mode=TwoWay}" /> <views:ItemPickerView BindingContext="{Binding}" Title="Classe" ItemsSource="{Binding Classes.Result}" SelectedItem="{Binding SelectedPlayerCharacter.Class, Mode=TwoWay}" />
<!--<Picker Title="Classe" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Classes.IsSuccessfullyCompleted}" ItemsSource="{Binding Classes.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding ClassSelectedIndex, Mode=TwoWay}" />--> <!--<Picker Title="Classe" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Classes.IsSuccessfullyCompleted}" ItemsSource="{Binding Classes.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding ClassSelectedIndex, Mode=TwoWay}" />-->
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedClass.Markdown}" /> <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Class.Markdown}" />
</StackLayout> </StackLayout>
</ScrollView> </ScrollView>
</ContentPage> </ContentPage>