Xamarin.Forms Kabuk gezintisi

Download Sample Örneği indirme

Xamarin.Forms Kabuk, belirli bir gezinti hiyerarşisini izlemek zorunda kalmadan uygulamadaki herhangi bir sayfaya gitmek için yolları kullanan URI tabanlı bir gezinti deneyimi içerir. Buna ek olarak, gezinti yığınındaki tüm sayfaları ziyaret etmek zorunda kalmadan geriye doğru gezinme olanağı da sağlar.

Shell sınıfı, gezintiyle ilgili aşağıdaki özellikleri tanımlar:

BackButtonBehavior, CurrentItemve CurrentState özellikleri nesneler tarafından BindableProperty desteklenir; bu da bu özelliklerin veri bağlamalarının hedefleri olabileceği anlamına gelir.

Gezinti, Shell sınıfından GoToAsync yöntemi çağrılarak gerçekleştirilir. Gezinti gerçekleştirilmek üzereyken olay Navigating tetiklenir ve Navigated gezinti tamamlandığında olay tetiklenir.

Not

Gezinti özelliği kullanılarak bir Shell uygulamasındaki sayfalar arasında gezinti yine de gerçekleştirilebilir. Daha fazla bilgi için bkz . Hiyerarşik Gezinti.

Rotalar

Gezinti, gidilmesi gereken bir URI belirtilerek bir Shell uygulamasında gerçekleştirilir. Gezinti URI'lerinin üç bileşeni olabilir:

  • Shell görsel hiyerarşisinin bir parçası olarak var olan içeriğe giden yolu tanımlayan bir yol.
  • Bir sayfa. Shell görsel hiyerarşisinde mevcut olmayan sayfalar, bir Shell uygulamasının içinde herhangi bir yerden gezinti yığınına gönderilebilir. Örneğin, ayrıntılar sayfası Kabuk görsel hiyerarşisinde tanımlanamaz, ancak gerektiğinde gezinti yığınına gönderilebilir.
  • Bir veya daha fazla sorgu parametresi. Sorgu parametreleri, gezinirken hedef sayfaya geçirilebilen parametrelerdir.

Gezinti URI'sinin üç bileşeni de içerdiğinde yapısı şöyle olur: //route/page?queryParameters

Yolları kaydetme

Yollar, özellikleri aracılığıyla , TabBar, Tabve ShellContent nesnelerinde RouteFlyoutItemtanımlanabilir:

<Shell ...>
    <FlyoutItem ...
                Route="animals">
        <Tab ...
             Route="domestic">
            <ShellContent ...
                          Route="cats" />
            <ShellContent ...
                          Route="dogs" />
        </Tab>
        <ShellContent ...
                      Route="monkeys" />
        <ShellContent ...
                      Route="elephants" />  
        <ShellContent ...
                      Route="bears" />
    </FlyoutItem>
    <ShellContent ...
                  Route="about" />                  
    ...
</Shell>

Not

Kabuk hiyerarşisindeki tüm öğelerin kendisiyle ilişkilendirilmiş bir yolu vardır. Yol ayarlamazsanız, çalışma zamanında bir yol oluşturulur. Ancak, oluşturulan yolların farklı uygulama oturumlarında tutarlı olması garanti edilmemektedir.

Yukarıdaki örnek, programlı gezintide kullanılabilecek aşağıdaki yol hiyerarşisini oluşturur:

animals
  domestic
    cats
    dogs
  monkeys
  elephants
  bears
about

Rotanın nesnesine ShellContent gitmek için dogs mutlak yol URI'si şeklindedir //animals/domestic/dogs. Benzer şekilde, yolun nesnesine ShellContent gitmek için about mutlak yol URI'si şeklindedir //about.

Uyarı

ArgumentException Yinelenen bir yol algılanırsa uygulama başlangıcında bir oluşturulur. Bu özel durum, hiyerarşide aynı düzeydeki iki veya daha fazla yol bir yol adını paylaşırsa da oluşturulur.

Ayrıntı sayfası yollarını kaydetme

Alt sınıf oluşturucusunda Shell veya bir yol çağrılmadan önce çalışan başka bir konumda, Kabuk görsel hiyerarşisinde temsil edilmeen tüm ayrıntı sayfaları için açıkça ek yollar kaydedilebilir. Bu, yöntemiyle Routing.RegisterRoute gerçekleştirilir:

Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));
Routing.RegisterRoute("beardetails", typeof(BearDetailPage));
Routing.RegisterRoute("catdetails", typeof(CatDetailPage));
Routing.RegisterRoute("dogdetails", typeof(DogDetailPage));
Routing.RegisterRoute("elephantdetails", typeof(ElephantDetailPage));

Bu örnek, alt sınıfta tanımlanmayan Shell ayrıntı sayfalarını yol olarak kaydeder. Daha sonra bu ayrıntı sayfaları, uygulamanın içinde herhangi bir yerden URI tabanlı gezinti kullanılarak gidilebilir. Bu tür sayfaların yolları genel yollar olarak bilinir.

Uyarı

yöntemi aynı yolu iki veya daha fazla farklı türe kaydetmeyi denerse Routing.RegisterRoute bir ArgumentException oluşturulur.

Alternatif olarak, sayfalar gerekirse farklı yol hiyerarşilerine kaydedilebilir:

Routing.RegisterRoute("monkeys/details", typeof(MonkeyDetailPage));
Routing.RegisterRoute("bears/details", typeof(BearDetailPage));
Routing.RegisterRoute("cats/details", typeof(CatDetailPage));
Routing.RegisterRoute("dogs/details", typeof(DogDetailPage));
Routing.RegisterRoute("elephants/details", typeof(ElephantDetailPage));

Bu örnek bağlamsal sayfa gezintisini details etkinleştirir; burada rotanın sayfasından yola gitmek için monkeys öğesini görüntüler MonkeyDetailPage. Benzer şekilde, yolun sayfasından details yola gitmek için elephants öğesini görüntüler ElephantDetailPage. Daha fazla bilgi için bkz . Bağlamsal gezinti.

Not

Yolları yöntemiyle Routing.RegisterRoute kaydedilmiş sayfaların kaydı gerekirse yöntemiyle Routing.UnRegisterRoute silinebilir.

Gezinti gerçekleştirme

Gezinti gerçekleştirmek için önce alt sınıfa Shell bir başvuru alınmalıdır. Bu başvuru, özelliği bir Shell nesneye App.Current.MainPage atanarak veya özelliği aracılığıyla Shell.Current elde edilebilir. Daha sonra nesnede Shell yöntemi çağrılarak GoToAsync gezinti gerçekleştirilebilir. Bu yöntem, öğesine ShellNavigationState gider ve gezinti animasyonu tamamlandıktan sonra tamamlanacak bir Task döndürür. ShellNavigationState nesnesi yöntemi tarafından GoToAsync bir veya Uriöğesinden stringoluşturulur ve özelliği veya Uri bağımsız değişkenine string ayarlanmıştırLocation.

Önemli

Kabuk görsel hiyerarşisinden bir rotaya gidildiğinde, gezinti yığını oluşturulmaz. Ancak, Kabuk görsel hiyerarşisinde olmayan bir sayfaya gidildiğinde bir gezinti yığını oluşturulur.

Nesnenin Shell geçerli gezinti durumu, özelliğinde Shell.Current.CurrentState görüntülenen yolun URI'sini Location içeren özelliği aracılığıyla alınabilir.

Mutlak yollar

Gezinti, yöntemine bağımsız değişken GoToAsync olarak geçerli bir mutlak URI belirtilerek gerçekleştirilebilir:

await Shell.Current.GoToAsync("//animals/monkeys");

Bu örnek, rotanın sayfasına monkeys gider ve yol bir ShellContent nesnede tanımlanır. Yolu ShellContent temsil monkeys eden nesne, yolu olan bir FlyoutItem nesnenin alt öğesidir animals.

Göreli yollar

Gezinti, yöntemine bağımsız değişken GoToAsync olarak geçerli bir göreli URI belirtilerek de gerçekleştirilebilir. Yönlendirme sistemi, URI'yi bir ShellContent nesneyle eşleştirmeyi dener. Bu nedenle, bir uygulamadaki tüm yollar benzersizse, gezinti yalnızca benzersiz yol adı göreli bir URI olarak belirtilerek gerçekleştirilebilir.

Aşağıdaki göreli yol biçimleri desteklenir:

Biçimlendir Açıklama
Rota Yol hiyerarşisi, geçerli konumdan yukarı doğru belirtilen yol için aranacak. Eşleşen sayfa gezinti yığınına gönderilir.
/Rota Yol hiyerarşisi, belirtilen rotadan, geçerli konumdan aşağı doğru aranır. Eşleşen sayfa gezinti yığınına gönderilir.
//Rota Yol hiyerarşisi, geçerli konumdan yukarı doğru belirtilen yol için aranacak. Eşleşen sayfa gezinti yığınının yerini alır.
///Rota Rota hiyerarşisi, geçerli konumdan aşağı doğru belirtilen yol için aranır. Eşleşen sayfa gezinti yığınının yerini alır.

Aşağıdaki örnek, yolun sayfasına monkeydetails gider:

await Shell.Current.GoToAsync("monkeydetails");

Bu örnekte, eşleşen sayfa bulunana monkeyDetails kadar yol hiyerarşiyi yukarı doğru arar. Sayfa bulunduğunda gezinti yığınına gönderilir.

Bağlamsal gezinti

Göreli yollar bağlamsal gezintiyi etkinleştirir. Örneğin, aşağıdaki yol hiyerarşisini göz önünde bulundurun:

monkeys
  details
bears
  details

Rotanın monkeys kayıtlı sayfası görüntülendiğinde, rotaya details gitmek yol için kayıtlı sayfayı monkeys/details görüntüler. Benzer şekilde, rotanın bears kayıtlı sayfası görüntülendiğinde, rotaya details gitmek, yolun kayıtlı sayfasını bears/details görüntüler. Bu örnekte yolları kaydetme hakkında bilgi için bkz . Sayfa yollarını kaydetme.

Geriye doğru gezinti

Yöntemin bağımsız değişkeni GoToAsync olarak ".." belirtilerek geriye doğru gezinti gerçekleştirilebilir:

await Shell.Current.GoToAsync("..");

".." ile geriye doğru gezinti bir yol ile de birleştirilebilir:

await Shell.Current.GoToAsync("../route");

Bu örnekte geriye doğru gezinti gerçekleştirilir ve ardından belirtilen yola gezinti yapılır.

Önemli

Geriye doğru ve belirtilen bir yola gitmek, yalnızca geriye doğru gezintinin sizi belirtilen yola gitmek için yol hiyerarşisindeki geçerli konuma getirmesi durumunda mümkündür.

Benzer şekilde, birden çok kez geriye gitmek ve ardından belirtilen bir yola gitmek mümkündür:

await Shell.Current.GoToAsync("../../route");

Bu örnekte, geriye doğru gezinti iki kez gerçekleştirilir ve ardından belirtilen yola gezinti yapılır.

Buna ek olarak, veriler geriye doğru gezinirken sorgu özellikleri aracılığıyla geçirilebilir:

await Shell.Current.GoToAsync($"..?parameterToPassBack={parameterValueToPassBack}");

Bu örnekte geriye doğru gezinti gerçekleştirilir ve sorgu parametresi değeri önceki sayfadaki sorgu parametresine geçirilir.

Not

Sorgu parametreleri herhangi bir geriye dönük gezinti isteğine eklenebilir.

Gezinirken veri geçirme hakkında daha fazla bilgi için bkz . Verileri geçirme.

Geçersiz yollar

Aşağıdaki yol biçimleri geçersiz:

Biçimlendir Açıklama
//page veya ///page Genel yollar şu anda gezinti yığınındaki tek sayfa olamaz. Bu nedenle, genel yollara mutlak yönlendirme desteklenmez.

Bu yol biçimlerinin kullanılması, bir Exception atılmasıyla sonuçlanıyor.

Uyarı

Varolmayan bir yola gidilmeye çalışılırsa bir ArgumentException özel durum oluşur.

Hata ayıklama gezintisi

Shell sınıflarından bazıları, hata ayıklayıcısı tarafından bir sınıfın DebuggerDisplayAttributeveya alanın nasıl görüntüleneceğini belirten ile dekore edilmiştir. Bu, gezinti isteğiyle ilgili verileri görüntüleyerek gezinti isteklerinde hata ayıklamaya yardımcı olabilir. Örneğin, aşağıdaki ekran görüntüsü nesnenin CurrentItem ve CurrentState özelliklerini Shell.Current gösterir:

Screenshot of debugger

Bu örnekte, türündeki CurrentItemFlyoutItemözelliği nesnenin FlyoutItem başlığını ve yolunu görüntüler. Benzer şekilde, türündeki CurrentStateShellNavigationStateözelliği, Shell uygulaması içinde görüntülenen yolun URI'sini görüntüler.

Tab sınıfı, içindeki Tabgeçerli gezinti yığınını temsil eden türünde IReadOnlyList<Page>bir Stack özellik tanımlar. sınıfı aşağıdaki geçersiz kılınabilir gezinti yöntemlerini de sağlar:

  • GetNavigationStack, geçerli gezinti yığınını döndürür IReadOnlyList<Page>.
  • OnInsertPageBefore, çağrıldığında INavigation.InsertPageBefore çağrılır.
  • OnPopAsyncTask<Page>, döndürür ve çağrıldığında INavigation.PopAsync çağrılır.
  • OnPopToRootAsyncTask, döndürür ve çağrıldığında INavigation.OnPopToRootAsync çağrılır.
  • OnPushAsyncTask, döndürür ve çağrıldığında INavigation.PushAsync çağrılır.
  • OnRemovePage, çağrıldığında INavigation.RemovePage çağrılır.

Aşağıdaki örnekte yönteminin nasıl geçersiz kılınacak olduğu gösterilmektedir OnRemovePage :

public class MyTab : Tab
{
    protected override void OnRemovePage(Page page)
    {
        base.OnRemovePage(page);

        // Custom logic
    }
}

Bu örnekte nesneler, MyTab nesneler yerine Tab Shell görsel hiyerarşinizde kullanılmalıdır.

sınıfı Shell , programlı gezinti veya kullanıcı etkileşimi nedeniyle gezinti gerçekleştirilmek üzereyken tetiklenen olayı tanımlar Navigating . Olaya ShellNavigatingEventArgs eşlik Navigating eden nesne aşağıdaki özellikleri sağlar:

Özellik Türü Açıklama
Current ShellNavigationState Geçerli sayfanın URI'sini.
Source ShellNavigationSource Oluşan gezinti türü.
Target ShellNavigationState Gezintinin hedeflendiği yeri temsil eden URI.
CanCancel bool Gezintiyi iptal etmek mümkün olup olmadığını gösteren bir değer.
Cancelled bool Gezintinin iptal edilip iptal edilmediğini gösteren değer.

Ayrıca sınıfı, gezintiyi ShellNavigatingEventArgs iptal etmek için kullanılabilecek bir Cancel yöntem ve GetDeferral gezintiyi tamamlamak için kullanılabilecek bir belirteç döndüren bir ShellNavigatingDeferral yöntem sağlar. Gezinti erteleme hakkında daha fazla bilgi için bkz . Gezinti erteleme.

sınıfı Shell , gezinti tamamlandığında tetiklenen olayı da tanımlar Navigated . Olaya ShellNavigatedEventArgs eşlik Navigated eden nesne aşağıdaki özellikleri sağlar:

Özellik Türü Açıklama
Current ShellNavigationState Geçerli sayfanın URI'sini.
Previous ShellNavigationState Önceki sayfanın URI'sini.
Source ShellNavigationSource Oluşan gezinti türü.

Önemli

OnNavigating yöntemi, olay tetiklendiğinde Navigating çağrılır. Benzer şekilde, OnNavigated olay tetiklendiğinde Navigated yöntemi çağrılır. Gezinti isteklerini kesmek için her iki yöntem de alt sınıfınızda Shell geçersiz kılınabilir.

ShellNavigatedEventArgs ve ShellNavigatingEventArgs sınıflarının her ikisi de türünde ShellNavigationSourceözelliklere sahiptirSource. Bu numaralandırma aşağıdaki değerleri sağlar:

  • Unknown
  • Push
  • Pop
  • PopToRoot
  • Insert
  • Remove
  • ShellItemChanged
  • ShellSectionChanged
  • ShellContentChanged

Bu nedenle, gezinti bir OnNavigating geçersiz kılmada kesilebilir ve gezinti kaynağı temelinde eylemler gerçekleştirilebilir. Örneğin, aşağıdaki kod sayfadaki veriler kaydedilmemişse geriye doğru gezinmeyi nasıl iptal edileceğini gösterir:

protected override void OnNavigating(ShellNavigatingEventArgs args)
{
    base.OnNavigating(args);

    // Cancel any back navigation.
    if (args.Source == ShellNavigationSource.Pop)
    {
        args.Cancel();
    }
// }

Kabuk gezintisi, kullanıcı seçimine göre kesilebilir, tamamlanabilir veya iptal edilebilir. Bu, alt sınıfınızdaki Shell yöntemi geçersiz kılarak OnNavigating ve nesnesi üzerinde GetDeferralShellNavigatingEventArgs yöntemini çağırarak gerçekleştirilebilir. Bu yöntem, gezinti isteğini tamamlamak için kullanılabilecek bir yöntemi olan bir Complete belirteç döndürürShellNavigatingDeferral:

public MyShell : Shell
{
    // ...
    protected override async void OnNavigating(ShellNavigatingEventArgs args)
    {
        base.OnNavigating(args);

        ShellNavigatingDeferral token = args.GetDeferral();

        var result = await DisplayActionSheet("Navigate?", "Cancel", "Yes", "No");
        if (result != "Yes")
        {
            args.Cancel();
        }
        token.Complete();
    }    
}

Bu örnekte, kullanıcıyı gezinti isteğini tamamlamaya veya iptal etmeye davet eden bir eylem sayfası görüntülenir. Nesnede yöntemi ShellNavigatingEventArgs çağrılarak Cancel gezinti iptal edilir. Gezinti, nesnesindeki Complete yöntemi tarafından alınan belirteçte yöntemi ShellNavigatingDeferralShellNavigatingEventArgs çağrılarak GetDeferral tamamlanır.

Uyarı

Bir GoToAsync kullanıcı bekleyen bir InvalidOperationException gezinti ertelemesi varken gezinmeyi denerse yöntemi bir oluşturur.

Verileri geçirme

Veriler, URI tabanlı programlı gezinti gerçekleştirilirken sorgu parametresi olarak geçirilebilir. Bu, bir yolun arkasına eklenerek ve ardından bir sorgu parametresi kimliği, =ve bir değer eklenerek ? elde edilir. Örneğin, kullanıcı üzerinde bir fil ElephantsPageseçtiğinde örnek uygulamada aşağıdaki kod yürütülür:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}

Bu kod örneği, içinde CollectionViewseçili durumdaki fili alır ve sorgu parametresi olarak geçirerek elephantName yola giderelephantdetails.

Gezinti verilerini almaya yönelik iki yaklaşım vardır:

  1. Gidilmekte olan sayfayı veya sayfanın BindingContextsınıfını temsil eden sınıf, her sorgu parametresi için bir QueryPropertyAttribute ile donatılabilir. Daha fazla bilgi için bkz . Sorgu özelliği özniteliklerini kullanarak gezinti verilerini işleme.
  2. Gidilmekte olan sayfayı temsil eden sınıf veya sayfanın BindingContextsınıfı arabirimini IQueryAttributable uygulayabilir. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme.

Sorgu özelliği özniteliklerini kullanarak gezinti verilerini işleme

Gezinti verileri, alıcı sınıfı her sorgu parametresi için bir QueryPropertyAttribute ile süslenerek alınabiliyor:

[QueryProperty(nameof(Name), "name")]
public partial class ElephantDetailPage : ContentPage
{
    public string Name
    {
        set
        {
            LoadAnimal(value);
        }
    }
    ...

    void LoadAnimal(string name)
    {
        try
        {
            Animal animal = ElephantData.Elephants.FirstOrDefault(a => a.Name == name);
            BindingContext = animal;
        }
        catch (Exception)
        {
            Console.WriteLine("Failed to load animal.");
        }
    }    
}

için QueryPropertyAttribute ilk bağımsız değişken, verileri alacak özelliğin adını belirtir ve ikinci bağımsız değişken sorgu parametresi kimliğini belirtir. Bu nedenle, QueryPropertyAttribute yukarıdaki örnekte özelliğin Name yöntem çağrısındaki URI'den GoToAsync sorgu parametresinde name geçirilen verileri alacağını belirtir. Özellik Name ayarlayıcısı, nesnesini almak Animal için nameyöntemini çağırır LoadAnimal ve bunu sayfanın adı BindingContext olarak ayarlar.

Not

aracılığıyla QueryPropertyAttribute alınan sorgu parametresi değerleri otomatik olarak URL kodu çözülmektedir.

Tek bir yöntem kullanarak gezinti verilerini işleme

Gezinti verileri, alma sınıfında arabirimi uygulanarak IQueryAttributable alınabiliyor. arabirimi, IQueryAttributable uygulayan sınıfın yöntemini uygulaması ApplyQueryAttributes gerektiğini belirtir. Bu yöntemin, gezinti sırasında geçirilen verileri içeren türünde IDictionary<string, string>bir query bağımsız değişkeni vardır. Sözlükteki her anahtar bir sorgu parametresi kimliğidir ve değeri sorgu parametresi değeridir. Bu yaklaşımı kullanmanın avantajı, gezinti verilerinin tek bir yöntem kullanılarak işlenebileceğidir. Bu yöntem, bir bütün olarak işlenmesi gereken birden çok gezinti verisi öğeniz olduğunda yararlı olabilir.

Aşağıdaki örnekte arabirimini uygulayan bir görünüm modeli sınıfı gösterilmektedir IQueryAttributable :

public class MonkeyDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Monkey { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, string> query)
    {
        // The query parameter requires URL decoding.
        string name = HttpUtility.UrlDecode(query["name"]);
        LoadAnimal(name);
    }

    void LoadAnimal(string name)
    {
        try
        {
            Monkey = MonkeyData.Monkeys.FirstOrDefault(a => a.Name == name);
            OnPropertyChanged("Monkey");
        }
        catch (Exception)
        {
            Console.WriteLine("Failed to load animal.");
        }
    }
    ...
}

Bu örnekte yöntemi, ApplyQueryAttributes yöntem çağrısındaki URI'den sorgu parametresinin GoToAsync değerini name alır. Ardından yöntemi, LoadAnimal veriye bağlı özelliğin Animal değeri Monkey olarak ayarlandığı nesnesini almak için çağrılır.

Önemli

Arabirim aracılığıyla IQueryAttributable alınan sorgu parametresi değerleri otomatik olarak URL kodunu çözmez.

Birden çok sorgu parametresi geçirme ve işleme

ile bağlanarak &birden çok sorgu parametresi geçirilebilir. Örneğin, aşağıdaki kod iki veri öğesi geçirir:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    string elephantLocation = (e.CurrentSelection.FirstOrDefault() as Animal).Location;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}&location={elephantLocation}");
}

Bu kod örneği, içinde seçili durumdaki CollectionViewfili alır ve sorgu parametreleri olarak geçirerek elephantNameelephantLocation rotaya elephantdetails gider.

Birden çok veri öğesi almak için, gidilmekte olan sayfayı temsil eden sınıf veya sayfanın BindingContextsınıfı her sorgu parametresi için bir QueryPropertyAttribute ile donatılabilir:

[QueryProperty(nameof(Name), "name")]
[QueryProperty(nameof(Location), "location")]
public partial class ElephantDetailPage : ContentPage
{
    public string Name
    {
        set
        {
            // Custom logic
        }
    }

    public string Location
    {
        set
        {
            // Custom logic
        }
    }
    ...    
}

Bu örnekte, sınıfı her sorgu parametresi için bir QueryPropertyAttribute ile dekore edilmiştir. birincisi QueryPropertyAttribute , özelliğin Name sorgu parametresinde name geçirilen verileri alacağını belirtirken, ikincisi QueryPropertyAttribute özelliğin Location sorgu parametresinde location geçirilen verileri alacağını belirtir. Her iki durumda da sorgu parametresi değerleri yöntem çağrısındaki URI'de GoToAsync belirtilir.

Alternatif olarak gezinti verileri, gezinilen sayfayı IQueryAttributable temsil eden sınıfta veya sayfanın sınıfı için BindingContextarabirimi uygulanarak tek bir yöntemle işlenebilir:

public class ElephantDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Elephant { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, string> query)
    {
        string name = HttpUtility.UrlDecode(query["name"]);
        string location = HttpUtility.UrlDecode(query["location"]);
        ...        
    }
    ...
}

Bu örnekte yöntemi, ApplyQueryAttributes yöntem çağrısındaki name URI'den ve location sorgu parametrelerinin GoToAsync değerini alır.

Geri düğmesi davranışı

Geri düğmesi görünümü ve davranışı, eklenen özellik bir BackButtonBehavior nesneye BackButtonBehavior ayarlanarak yeniden tanımlanabilir. BackButtonBehavior sınıfı aşağıdaki özellikleri tanımlar:

  • Command, türündedir ICommandve geri düğmesine basıldığında yürütülür.
  • CommandParameter, türündeki objectparametresine Commandgeçirilir.
  • IconOverride, türünde ImageSource, geri düğmesi için kullanılan simge.
  • IsEnabled, türündeki boolean, geri düğmesinin etkinleştirilip etkinleştirilmediğini gösterir. Varsayılan değer şudur: true.
  • TextOverride, türündeki string, geri düğmesi için kullanılan metindir.

Bu özelliklerin tümü nesneler tarafından BindableProperty desteklenir, bu da özelliklerin veri bağlamalarının hedefleri olabileceği anlamına gelir.

Aşağıdaki kodda geri düğmesi görünümünü ve davranışını yeniden tanımlama örneği gösterilmektedir:

<ContentPage ...>    
    <Shell.BackButtonBehavior>
        <BackButtonBehavior Command="{Binding BackCommand}"
                            IconOverride="back.png" />   
    </Shell.BackButtonBehavior>
    ...
</ContentPage>

Eşdeğer C# kodu:

Shell.SetBackButtonBehavior(this, new BackButtonBehavior
{
    Command = new Command(() =>
    {
        ...
    }),
    IconOverride = "back.png"
});

Command özelliği, geri düğmesine basıldığında yürütülecek şekilde ICommand ayarlanır ve IconOverride özellik de geri düğmesi için kullanılan simgeye ayarlanır:

Screenshot of a Shell back button icon override, on iOS and Android