mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 15:36:07 +00:00 
			
		
		
		
	Refactor view models
This commit is contained in:
		
							parent
							
								
									bb89a212b6
								
							
						
					
					
						commit
						cc0f0ef161
					
				
					 5 changed files with 151 additions and 151 deletions
				
			
		|  | @ -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; } } | ||||
|     } | ||||
| } | ||||
|  | @ -150,95 +150,21 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
| 
 | ||||
|         #region Race | ||||
|         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 | ||||
|         { | ||||
|             public RaceItem Race { get; set; } | ||||
|             public SubRaceItem SubRace { get; set; } | ||||
|         //private RaceViewModel _SelectedRace = null; | ||||
|         //public RaceViewModel SelectedRace | ||||
|         //{ | ||||
|         //    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() | ||||
|         { | ||||
|             using (var context = await StoreViewModel.GetLibraryContextAsync()) | ||||
|  | @ -269,47 +195,32 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|         #region Class | ||||
|         public NotifyTaskCompletion<List<ClassViewModel>> Classes { get; private set; } | ||||
| 
 | ||||
|         private int _ClassSelectedIndex = -1; | ||||
|         public int ClassSelectedIndex | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _ClassSelectedIndex; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _ClassSelectedIndex, value); | ||||
|                 SelectedClass = Classes.Result[_ClassSelectedIndex]; | ||||
|             } | ||||
|         } | ||||
|         private ClassViewModel _SelectedClass = null; | ||||
|         public ClassViewModel SelectedClass | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _SelectedClass; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 SetProperty(ref _SelectedClass, value); | ||||
|                 //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; } } | ||||
|         } | ||||
|         //private int _ClassSelectedIndex = -1; | ||||
|         //public int ClassSelectedIndex | ||||
|         //{ | ||||
|         //    get | ||||
|         //    { | ||||
|         //        return _ClassSelectedIndex; | ||||
|         //    } | ||||
|         //    set | ||||
|         //    { | ||||
|         //        SetProperty(ref _ClassSelectedIndex, value); | ||||
|         //        SelectedClass = Classes.Result[_ClassSelectedIndex]; | ||||
|         //    } | ||||
|         //} | ||||
|         //private ClassViewModel _SelectedClass = null; | ||||
|         //public ClassViewModel SelectedClass | ||||
|         //{ | ||||
|         //    get | ||||
|         //    { | ||||
|         //        return _SelectedClass; | ||||
|         //    } | ||||
|         //    set | ||||
|         //    { | ||||
|         //        SetProperty(ref _SelectedClass, value); | ||||
|         //        //SelectedPlayerCharacter.Class = _SelectedClass; | ||||
|         //    } | ||||
|         //} | ||||
| 
 | ||||
|         public async Task<List<ClassViewModel>> LoadClassesAsync() | ||||
|         { | ||||
|  |  | |||
|  | @ -19,8 +19,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|                 SetProperty(ref _Alignment, value); | ||||
|             } | ||||
|         } | ||||
|         private RaceItem _Race = null; | ||||
|         public RaceItem Race | ||||
|         private RaceViewModel _Race = null; | ||||
|         public RaceViewModel Race | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|  | @ -31,8 +31,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|                 SetProperty(ref _Race, value); | ||||
|             } | ||||
|         } | ||||
|         private ClassItem _Class = null; | ||||
|         public ClassItem Class | ||||
|         private ClassViewModel _Class = null; | ||||
|         public ClassViewModel Class | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|  |  | |||
|  | @ -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; } } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -22,31 +22,31 @@ | |||
|     <ContentPage Title="Race"> | ||||
|         <ScrollView Orientation="Vertical"> | ||||
|             <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}" />--> | ||||
| 
 | ||||
|                 <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"> | ||||
| 
 | ||||
|                         <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="{Binding SelectedRace.AbilityScoreIncrease}" 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 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="{Binding SelectedRace.Age}" 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 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="{Binding SelectedRace.Alignment}" 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 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="{Binding SelectedRace.Size}" 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 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="{Binding SelectedRace.Speed}" 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 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="{Binding SelectedRace.Darkvision}" 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 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> | ||||
|                                 <DataTemplate> | ||||
|                                     <StackLayout> | ||||
|  | @ -57,8 +57,8 @@ | |||
|                             </BindableLayout.ItemTemplate> | ||||
|                         </StackLayout> | ||||
| 
 | ||||
|                         <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Langues" IsVisible="{Binding SelectedRace.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="#### Langues" IsVisible="{Binding SelectedPlayerCharacter.Race.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> | ||||
|                 </Frame> | ||||
|  | @ -69,9 +69,9 @@ | |||
|     <ContentPage Title="Classe"> | ||||
|         <ScrollView Orientation="Vertical"> | ||||
|             <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}" />--> | ||||
|                 <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedClass.Markdown}" /> | ||||
|                 <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Class.Markdown}" /> | ||||
|             </StackLayout> | ||||
|         </ScrollView> | ||||
|     </ContentPage> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez