mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-11-04 01:00:23 +00:00 
			
		
		
		
	NavigateToLink command
This commit is contained in:
		
							parent
							
								
									2e2aef66c8
								
							
						
					
					
						commit
						2d75cb2c67
					
				
					 6 changed files with 43 additions and 8 deletions
				
			
		| 
						 | 
					@ -11,10 +11,11 @@
 | 
				
			||||||
    using Extensions;
 | 
					    using Extensions;
 | 
				
			||||||
    using Markdig;
 | 
					    using Markdig;
 | 
				
			||||||
    using System.Threading.Tasks;
 | 
					    using System.Threading.Tasks;
 | 
				
			||||||
 | 
					    using System.Windows.Input;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class MarkdownView : ContentView
 | 
					    public class MarkdownView : ContentView
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public Func<string, Task> NavigateToLink { get; set; } = async(s) => Device.OpenUri(new Uri(s));
 | 
					        //public Func<string, Task> NavigateToLink { get; set; } = async(s) => Device.OpenUri(new Uri(s));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static MarkdownTheme Global = new LightMarkdownTheme();
 | 
					        public static MarkdownTheme Global = new LightMarkdownTheme();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +43,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static readonly BindableProperty ThemeProperty = BindableProperty.Create(nameof(Theme), typeof(MarkdownTheme), typeof(MarkdownView), Global, propertyChanged: OnMarkdownChanged);
 | 
					        public static readonly BindableProperty ThemeProperty = BindableProperty.Create(nameof(Theme), typeof(MarkdownTheme), typeof(MarkdownView), Global, propertyChanged: OnMarkdownChanged);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ICommand NavigateToLinkCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return (ICommand)GetValue(NavigateToLinkCommandProperty); }
 | 
				
			||||||
 | 
					            set { SetValue(NavigateToLinkCommandProperty, value); }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static readonly BindableProperty NavigateToLinkCommandProperty = BindableProperty.Create(nameof(NavigateToLinkCommand), typeof(ICommand), typeof(MarkdownView)); //, Global, propertyChanged: OnMarkdownChanged);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private bool isQuoted;
 | 
					        private bool isQuoted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private List<View> queuedViews = new List<View>();
 | 
					        private List<View> queuedViews = new List<View>();
 | 
				
			||||||
| 
						 | 
					@ -101,11 +113,13 @@
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                var result = await Application.Current.MainPage.DisplayActionSheet("Ouvrir le lien", "Annuler", null, blockLinks.Select(x => x.Key).ToArray());
 | 
					                                var result = await Application.Current.MainPage.DisplayActionSheet("Ouvrir le lien", "Annuler", null, blockLinks.Select(x => x.Key).ToArray());
 | 
				
			||||||
                                var link = blockLinks.FirstOrDefault(x => x.Key == result);
 | 
					                                var link = blockLinks.FirstOrDefault(x => x.Key == result);
 | 
				
			||||||
                                await NavigateToLink(link.Value);
 | 
					                                //await NavigateToLink(link.Value);
 | 
				
			||||||
 | 
					                                NavigateToLinkCommand?.Execute(link.Value);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                await NavigateToLink(blockLinks.First().Value);
 | 
					                                //await NavigateToLink(blockLinks.First().Value);
 | 
				
			||||||
 | 
					                                NavigateToLinkCommand?.Execute(blockLinks.First().Value);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        catch (Exception) { }
 | 
					                        catch (Exception) { }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text.RegularExpressions;
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using System.Windows.Input;
 | 
				
			||||||
using Xamarin.Forms;
 | 
					using Xamarin.Forms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace AideDeJeu.ViewModels
 | 
					namespace AideDeJeu.ViewModels
 | 
				
			||||||
| 
						 | 
					@ -52,6 +53,14 @@ namespace AideDeJeu.ViewModels
 | 
				
			||||||
            await Navigation.PushAsync(new FilteredItemsPage(itemsVM));
 | 
					            await Navigation.PushAsync(new FilteredItemsPage(itemsVM));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private ICommand _NavigateToLinkCommand = null;
 | 
				
			||||||
 | 
					        public ICommand NavigateToLinkCommand
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return _NavigateToLinkCommand ?? (_NavigateToLinkCommand = new Command<string>(async(s) => await NavigateToLinkAsync(s)));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task NavigateToLinkAsync(string s)
 | 
					        public async Task NavigateToLinkAsync(string s)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,8 @@
 | 
				
			||||||
             xmlns:tools="clr-namespace:AideDeJeu.Tools"
 | 
					             xmlns:tools="clr-namespace:AideDeJeu.Tools"
 | 
				
			||||||
             xmlns:mdview="clr-namespace:Xam.Forms.Markdown"
 | 
					             xmlns:mdview="clr-namespace:Xam.Forms.Markdown"
 | 
				
			||||||
             x:Class="AideDeJeu.Views.ItemDetailPage"
 | 
					             x:Class="AideDeJeu.Views.ItemDetailPage"
 | 
				
			||||||
             Title="{Binding Title}">
 | 
					             Title="{Binding Title}"
 | 
				
			||||||
 | 
					             x:Name="This">
 | 
				
			||||||
    <ContentPage.Resources>
 | 
					    <ContentPage.Resources>
 | 
				
			||||||
        <ResourceDictionary>
 | 
					        <ResourceDictionary>
 | 
				
			||||||
            <tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" />
 | 
					            <tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" />
 | 
				
			||||||
| 
						 | 
					@ -15,6 +16,11 @@
 | 
				
			||||||
        <ToolbarItem Name="About" Text="À propos de..." Order="Secondary" Icon="wooden_sign.png" Command="{Binding Main.AboutCommand}" />
 | 
					        <ToolbarItem Name="About" Text="À propos de..." Order="Secondary" Icon="wooden_sign.png" Command="{Binding Main.AboutCommand}" />
 | 
				
			||||||
    </ContentPage.ToolbarItems>
 | 
					    </ContentPage.ToolbarItems>
 | 
				
			||||||
    <ScrollView Orientation="Vertical" BackgroundColor="#fdf1dc">
 | 
					    <ScrollView Orientation="Vertical" BackgroundColor="#fdf1dc">
 | 
				
			||||||
        <mdview:MarkdownView x:Name="mdMarkdown" Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding Item.Markdown}" />
 | 
					        <mdview:MarkdownView 
 | 
				
			||||||
 | 
					            x:Name="mdMarkdown" 
 | 
				
			||||||
 | 
					            Theme="{StaticResource MonsterMarkdownTheme}" 
 | 
				
			||||||
 | 
					            Markdown="{Binding Item.Markdown}" 
 | 
				
			||||||
 | 
					            NavigateToLinkCommand="{Binding BindingContext.Main.Navigator.NavigateToLinkCommand, Source={x:Reference This}}"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
    </ScrollView>
 | 
					    </ScrollView>
 | 
				
			||||||
</ContentPage>
 | 
					</ContentPage>
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,8 @@ namespace AideDeJeu.Views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BindingContext = this.viewModel = itemVM;
 | 
					            BindingContext = this.viewModel = itemVM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mdMarkdown.NavigateToLink = async (s) => await viewModel.Main.Navigator.NavigateToLinkAsync(s);
 | 
					
 | 
				
			||||||
 | 
					            //mdMarkdown.NavigateToLink = async (s) => await viewModel.Main.Navigator.NavigateToLinkAsync(s);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public ItemDetailPage()
 | 
					        public ItemDetailPage()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,12 @@
 | 
				
			||||||
    </ContentPage.ToolbarItems>
 | 
					    </ContentPage.ToolbarItems>
 | 
				
			||||||
    <ListView BackgroundColor="{StaticResource bgtan}" x:Name="ItemsListView" ItemsSource="{Binding Items}" VerticalOptions="FillAndExpand" HasUnevenRows="true" CachingStrategy="RecycleElement" SelectedItem="{Binding SelectedItem}" ItemTapped="ItemsListView_ItemTapped">
 | 
					    <ListView BackgroundColor="{StaticResource bgtan}" x:Name="ItemsListView" ItemsSource="{Binding Items}" VerticalOptions="FillAndExpand" HasUnevenRows="true" CachingStrategy="RecycleElement" SelectedItem="{Binding SelectedItem}" ItemTapped="ItemsListView_ItemTapped">
 | 
				
			||||||
        <ListView.Header>
 | 
					        <ListView.Header>
 | 
				
			||||||
            <mdview:MarkdownView x:Name="mdMarkdown" Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding BindingContext.Items.Header, Source={x:Reference This}}" />
 | 
					            <mdview:MarkdownView 
 | 
				
			||||||
 | 
					                x:Name="mdMarkdown" 
 | 
				
			||||||
 | 
					                Theme="{StaticResource MonsterMarkdownTheme}" 
 | 
				
			||||||
 | 
					                Markdown="{Binding BindingContext.Items.Header, Source={x:Reference This}}" 
 | 
				
			||||||
 | 
					                NavigateToLinkCommand="{Binding BindingContext.Main.Navigation.NavigateToLinkCommand, Source={x:Reference This}}"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
        </ListView.Header>
 | 
					        </ListView.Header>
 | 
				
			||||||
        <ListView.ItemTemplate>
 | 
					        <ListView.ItemTemplate>
 | 
				
			||||||
            <DataTemplate>
 | 
					            <DataTemplate>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ namespace AideDeJeu.Views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BindingContext = _ItemsViewModel = itemsViewModel;
 | 
					            BindingContext = _ItemsViewModel = itemsViewModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mdMarkdown.NavigateToLink = async (s) => await itemsViewModel.Main.Navigator.NavigateToLinkAsync(s);
 | 
					            //mdMarkdown.NavigateToLink = async (s) => await itemsViewModel.Main.Navigator.NavigateToLinkAsync(s);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public ItemsPage()
 | 
					        public ItemsPage()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue