Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) Kabuğu, 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, türünde BackButtonBehavior, geri tuşunun davranışını tanımlayan bir ek özelliktir.
-
CurrentItem
, türüneShellItem
göre seçili durumdaki öğedir. -
CurrentPage
, Page türündeki şu anda sunulan sayfadır. -
CurrentState
,ShellNavigationState
türündeki, Shell geçerli gezinti durumu. -
Current
, türündeki Shell, geçerli Shell'e erişim sağlar.
BackButtonBehavior, CurrentItem
ve CurrentState
özellikleri nesneler tarafından BindableProperty desteklenir; bu da bu özelliklerin veri bağlamalarının hedefleri olabileceği anlamına gelir.
Gezinti, GoToAsync sınıfından Shell yöntemi çağrılarak gerçekleştirilir. Gezinti gerçekleştirilmek üzereyken Navigating
olayı tetiklenir ve gezinti tamamlandığında Navigated
olayı tetiklenir.
Not
Özelliği kullanılarak Navigation
bir Shell uygulamasındaki sayfalar arasında gezinti yine de gerçekleştirilebilir. Daha fazla bilgi için Modsuz gezinti gerçekleştirme konusuna bakın.
Güzergahlar
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, kendi Route
özellikleri üzerinden FlyoutItem, TabBar, Tab ve ShellContent nesnelerinde tanı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 rotası 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
ShellContent nesnesine gitmek için dogs
rotası için mutlak yol URI'si //animals/domestic/dogs
şeklindedir. Benzer şekilde, about
yönü için ShellContent nesnesine gitmek üzere, mutlak yol URI'si //about
şeklindedir.
Uyarı
Uygulama başlangıcında yinelenen bir yol algılanırsa bir ArgumentException
atılır. Bu istisna, hiyerarşide aynı düzeydeki iki veya daha fazla rota aynı rota adını paylaşıyorsa da atılır.
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 edilmeyen tüm ayrıntı sayfaları için açıkça ek yollar kaydedilebilir. Bu, Routing.RegisterRoute
yöntemi ile 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ına uygulamanın içindeki herhangi bir yerden URI tabanlı navigasyon kullanılarak gidilebilir. Bu tür sayfaların yolları genel yollar olarak bilinir.
Uyarı
Eğer Routing.RegisterRoute
yöntemi, aynı rotayı iki veya daha fazla farklı türe kaydetmeye çalışırsa, bir ArgumentException
atılır.
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, details
rotasına, monkeys
rotasının sayfasından gidildiğinde MonkeyDetailPage
öğesinin gösterildiği bağlamsal sayfa gezinmesini etkinleştirir. Benzer şekilde, details
yolundaki sayfadan elephants
yoluna geçiş yapmak, ElephantDetailPage
öğesini görüntüler. Daha fazla bilgi için bkz . Bağlamsal gezinti.
Not
Routing.RegisterRoute
yöntemiyle kaydedilmiş sayfaların kaydı, gerekirse Routing.UnRegisterRoute
yöntemiyle silinebilir.
Gezinme işlemi yap.
Navigasyonu gerçekleştirebilmek için önce Shell alt sınıfına bir referans edinilmelidir. Bu referans, Shell.Current
özelliği aracılığıyla alınabilir. Daha sonra nesnede GoToAsync yöntemi çağrılarak Shell gezinti gerçekleştirilebilir. Bu yöntem, bir ShellNavigationState
'e gider ve gezinti animasyonu tamamlandıktan sonra tamamlanacak olan bir Task
döndürür.
ShellNavigationState
nesnesi, GoToAsync yöntemi tarafından, bir string
veya bir Uri
üzerinden oluşturulur ve Location
özelliği, string
ya da Uri
bağımsız değişkenine ayarlanmıştır.
Önemli
Shell görsel hiyerarşisinden bir rotaya gidildiğinde, bir navigasyon yığını oluşturulmaz. Ancak, Kabuk görsel hiyerarşisinde olmayan bir sayfaya gidildiğinde bir gezinti yığını oluşturulur.
Shell nesnesinin geçerli gezinti durumu, görüntülenen yolun URI'sini içeren Location
özelliği aracılığıyla Shell.Current.CurrentState
özelliğinden alınabilir.
Mutlak rotalar
Gezinme, GoToAsync yöntemine parametre olarak geçerli bir mutlak URI belirtilerek gerçekleştirilebilir.
await Shell.Current.GoToAsync("//animals/monkeys");
Bu örnek, bir ShellContent nesnesinde tanımlanan monkeys
rotasının sayfasına gider.
ShellContent güzergahını temsil eden nesne, güzergahı animals
olan bir FlyoutItem nesnenin alt öğesidir.
Uyarı
Mutlak yollar, Routing.RegisterRoute
yöntemiyle kaydedilen sayfalarla çalışmaz.
Göreli yollar
Navigasyon, GoToAsync yöntemine bir bağımsız değişken 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 URI olarak belirtilerek gerçekleştirilebilir.
Aşağıdaki örnek, güzergahın sayfasına monkeydetails
yönlendirilir.
await Shell.Current.GoToAsync("monkeydetails");
Bu örnekte, eşleşen sayfa bulunana kadar monkeyDetails
yolu aranılır. Sayfa bulunduğunda gezinti yığınına gönderilir.
Uyarı
Göreli yollar, genellikle Shellolan alt sınıf sınıfında tanımlanan sayfalarla çalışmaz. Bunun yerine, yalnızca Routing.RegisterRoute
yöntemiyle kaydedilen sayfalar göreli yollar kullanılarak gezinti yığınına gönderilebilir. Daha fazla bilgi için kayıt ayrıntı sayfası yolları hakkında bkz..
Bağlamsal navigasyon
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
için kayıtlı sayfa görüntülendiğinde, details
rotasına gidildiğinde, monkeys/details
rotası için kayıtlı sayfa görüntülenir. Benzer şekilde, bears
rotasının kayıtlı sayfası görüntülendiğinde, details
rotasına gidildiğinde, bears/details
rotasının kayıtlı sayfası görüntülenir. Bu örnekteki yolları nasıl kaydedeceğiniz 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.
Veri geçirme hakkında daha fazla bilgi için Veri Geçirme kısmına bakın.
Geçersiz yollar
Aşağıdaki yol biçimleri geçersiz:
Biçim | Açıklama |
---|---|
// page veya ///page | Küresel rotalar şu anda navigasyon 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 gitmeye çalışmak bir ArgumentException
özel durumun fırlatılmasına neden olur.
Hata ayıklama navigasyonu
Shell sınıflarından bazıları, bir sınıfın veya alanın hata ayıklayıcı tarafından nasıl görüntüleneceğini belirten DebuggerDisplayAttribute
ile süslenmiş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:
Bu örnekte, türündeki CurrentItem
FlyoutItemözelliği nesnenin FlyoutItem başlığını ve yolunu görüntüler. Benzer şekilde, türündeki CurrentState
ShellNavigationState
özelliği, Shell uygulamasında görüntülenen yolun URI'sini görüntüler.
Navigasyon yığını
Tab sınıfı, Tab içindeki geçerli gezinti yığınını temsil eden IReadOnlyList<Page>
türünde bir Stack
özelliği tanımlar. Sınıf ayrıca aşağıdaki geçersiz kılınabilir gezinti yöntemlerini sağlar:
-
GetNavigationStack
, geçerli gezinti yığınını döndürürIReadOnlyList<Page>
. -
INavigation.InsertPageBefore
,OnInsertPageBefore
çağrıldığında çağrılır. -
OnPopAsync
,Task<Page>
döndürür veINavigation.PopAsync
çağrıldığında çağrılır. -
OnPopToRootAsync
,Task
döndürür veINavigation.OnPopToRootAsync
çağrıldığında çağrılır. -
OnPushAsync
,Task
döndürülür veINavigation.PushAsync
çağrıldığında çağrılır. -
INavigation.RemovePage
çağrıldığındaOnRemovePage
çağrılır.
Aşağıdaki örnekte, OnRemovePage
yönteminin nasıl geçersiz kılınacağı gösterilmektedir.
public class MyTab : Tab
{
protected override void OnRemovePage(Page page)
{
base.OnRemovePage(page);
// Custom logic
}
}
Bu örnekte, Tab nesneler yerine MyTab
nesneler Shell görsel hiyerarşinizde kullanmalısınız.
Gezinti olayları
sınıfı Shell , programlı gezinti veya kullanıcı etkileşimi nedeniyle gezinti gerçekleştirilmek üzereyken tetiklenen olayı tanımlar Navigating
.
ShellNavigatingEventArgs
olayına eşlik eden Navigating
nesnesi, aşağıdaki özellikleri sağlar:
Özellik | Türü | Açıklama |
---|---|---|
Current |
ShellNavigationState |
Geçerli sayfanın URI'sini. |
Source |
ShellNavigationSource |
Gerçekleşen navigasyon 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. |
ShellNavigatingEventArgs
sınıfı, gezintiyi iptal etmek için kullanılabilecek bir Cancel
yöntem ve gezintiyi tamamlamak için kullanılabilecek bir belirteç döndüren bir ShellNavigatingDeferral
yöntemi 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
.
Navigated
olayına eşlik eden ShellNavigatedEventArgs
nesnesi aşağıdaki özellikleri sağlar:
Özellik | Türü | Açıklama |
---|---|---|
Current |
ShellNavigationState |
Geçerli sayfanın URI bağlantısı. |
Previous |
ShellNavigationState |
Önceki sayfanın URI'sini. |
Source |
ShellNavigationSource |
Gerçekleşen gezinme türü. |
Önemli
OnNavigating
yöntemi, Navigating
olayı tetiklendiğinde çağrılır. Benzer şekilde, OnNavigated
olay tetiklendiğinde Navigated
yöntemi çağrılır. Gezinti taleplerini engellemek için her iki yöntem de Shell alt sınıfınızda geçersiz kılınabilir.
ShellNavigatedEventArgs
ve ShellNavigatingEventArgs
sınıflarının her ikisi de ShellNavigationSource
türünde Source
özelliklere sahiptir. 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ılma işlemi sırasında durdurulabilir ve gezinti kaynağına göre 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();
}
}
Navigasyon erteleme
Kabuk navigasyonu, kullanıcı seçimine göre kesilebilir, tamamlanabilir veya iptal edilebilir. Bu, Shell alt sınıfınızda OnNavigating
yöntemini geçersiz kılarak ve ShellNavigatingEventArgs
nesnesi üzerinde GetDeferral
yöntemini çağırarak gerçekleştirilebilir. Bu yöntem, gezinti isteğini tamamlamak için kullanılabilecek bir yöntemi olan bir ShellNavigatingDeferral
belirteç döndürürComplete
:
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();
}
}
public MyShell : Shell
{
// ...
protected override async void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
ShellNavigatingDeferral token = args.GetDeferral();
var result = await DisplayActionSheetAsync("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.
ShellNavigatingEventArgs
nesnesi üzerinde Cancel
yöntemi çağrılarak gezinti iptal edilir. Gezinti, nesnesindeki Complete
yöntemi tarafından alınan belirteçte yöntemi ShellNavigatingDeferral
GetDeferral
çağrılarak ShellNavigatingEventArgs
tamamlanır.
Uyarı
Bir GoToAsync kullanıcı bekleyen bir InvalidOperationException
gezinti ertelemesi varken gezinmeyi denerse yöntemi bir oluşturur.
Verileri ilet
URI tabanlı programlı gezinti gerçekleştirilirken ilkel veriler dize tabanlı sorgu parametreleri olarak geçirilebilir. Bu, bir yolun arkasına ?
eklenerek ve ardından bir sorgu parametresi kimliği ve bir değer eklenerek =
elde edilir.
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}
Bu örnek, CollectionView içinde şu anda seçili olan fili alır, elephantName
'yi sorgu parametresi olarak geçirerek elephantdetails
yoluna gidilir.
Birden çok nesne tabanlı gezinti verisini iletme
Birden çok kullanımlı nesne tabanlı gezinti verileri, bağımsız değişken belirten GoToAsync bir IDictionary<string, object>
aşırı yüklemeyle geçirilebilir:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
var navigationParameter = new Dictionary<string, object>
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}
Bu örnek, CollectionView içindeki seçili ayıyı bir Animal
olarak getirir. Anahtar Bear
kullanılarak Animal
nesnesi Dictionary
öğesine eklenir. Ardından, Dictionary
parametresi olarak geçirilerek, beardetails
rotasına bir gezinti gerçekleştirilir.
Argüman olarak IDictionary<string, object>
geçirilen veriler, sayfanın ömrü boyunca bellekte tutulur ve sayfa gezinti yığınından kaldırılana kadar serbest bırakılmaz. Bu, aşağıdaki senaryoda gösterildiği gibi sorunlu olabilir:
-
Page1
, GoToAsync yöntemini kullanarakPage2
'ye gider ve adıMyData
olan bir nesneyi geçirir.Page2
ardından sorgu parametresi olarak alırMyData
. -
Page2
herhangi bir veri geçirmeden GoToAsync yöntemini kullanarakPage3
'e geçiş yapar. -
Page3
yöntemiyle GoToAsync geriye doğru gider.Page2
ardından sorgu parametresi olarak yeniden alırMyData
.
Bu, birçok senaryoda istenen bir durum olsa da istenmiyorsa, bir sayfa tarafından ilk kez alındıktan sonra Clear
yöntemini kullanarak IDictionary<string, object>
bağımsız değişkenini temizlemelisiniz.
Tek kullanımlık nesne tabanlı gezinti verilerini aktar
Tek kullanımlık nesne tabanlı gezinti verileri, bağımsız değişken belirten GoToAsync bir ShellNavigationQueryParameters aşırı yüklemeyle geçirilebilir. ShellNavigationQueryParameters nesnesi, gezinti gerçekleştikten sonra temizlenen tek kullanımlık gezinti verileri için tasarlanmıştır. Aşağıdaki örnek, tek kullanımlık verileri geçirirken gezinmeyi gösterir:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
var navigationParameter = new ShellNavigationQueryParameters
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}
Şu anda seçili olan ayı, nesneye eklenen bir Animal
olarak ShellNavigationQueryParameters içinden alınır. Ardından, beardetails
rotasına yönlendirme gerçekleştirilir ve ShellNavigationQueryParameters nesnesi bir yönlendirme parametresi olarak geçirilir. Gezinti gerçekleştikten sonra nesnedeki ShellNavigationQueryParameters veriler temizlenir.
Gezinti verilerini alma
Gezinti verilerini almaya yönelik iki yaklaşım vardır:
- Gidilmekte olan sayfayı veya sayfanın
BindingContext
sı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. - Gezinilen sayfayı temsil eden sınıf veya sayfanın `
BindingContext
` sınıfı, `IQueryAttributable` arabirimini 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
Gezinme verileri, her dize tabanlı sorgu parametresi, nesne tabanlı gezinti parametresi veya QueryPropertyAttribute nesne için alıcı sınıfı bir ShellNavigationQueryParameters ile işaretlenerek alınabilir.
[QueryProperty(nameof(Bear), "Bear")]
public partial class BearDetailPage : ContentPage
{
Animal bear;
public Animal Bear
{
get => bear;
set
{
bear = value;
OnPropertyChanged();
}
}
public BearDetailPage()
{
InitializeComponent();
BindingContext = this;
}
}
Bu örnekte için ilk bağımsız değişken QueryPropertyAttribute , verileri alacak özelliğin adını belirtir ve ikinci bağımsız değişken parametre kimliğini belirtir. Bu nedenle, QueryPropertyAttribute yukarıdaki örnekte özelliğin Bear
yöntem çağrısındaki gezinti parametresinde Bear
GoToAsync geçirilen verileri alacağını belirtir.
Önemli
aracılığıyla QueryPropertyAttribute alınan dize tabanlı sorgu parametresi değerleri otomatik olarak URL kodunun çözülmesini sağlar.
Uyarı
kullanarak QueryPropertyAttribute gezinti verilerini almak güvenli değildir ve tam kırpma veya NativeAOT ile kullanılmamalıdır. Bunun yerine, sorgu parametrelerini kabul etmesi gereken türlerde IQueryAttributable arabirimini uygulamanız gerekir. Daha fazla bilgi için bkz. Tek bir yöntem kullanarak gezinti verilerini işleme, .NET MAUI uygulamasını düzenleme ve Yerel AOT dağıtımı.
Tek bir yöntem kullanarak gezinti verilerini işleme
Gezinti verileri, alma sınıfında arabirimi uygulanarak IQueryAttributable alınabiliyor. Arayüz, IQueryAttributable sınıfının ApplyQueryAttributes
yöntemini uygulaması gerektiğini belirtir. Bu yöntemin, türü IDictionary<string, object>
olan ve gezinti sırasında geçirilen verileri içeren bir query
bağımsız değişkeni vardır. Sözlükteki her anahtar, verileri temsil eden nesneye karşılık gelen değeriyle bir sorgu parametresi kimliğidir. 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 örnek, IQueryAttributable arabirimini uygulayan bir görünüm modeli sınıfını göstermektedir.
public class MonkeyDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
public Animal Monkey { get; private set; }
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
Monkey = query["Monkey"] as Animal;
OnPropertyChanged("Monkey");
}
...
}
Bu örnekte, yöntem Monkey
anahtarı ile query
sözlüğünde karşılık gelen nesneyi alır; bu sözlük, GoToAsync yöntemi çağrısına bağımsız değişken olarak geçirilmiştir.
Önemli
Arabirim aracılığıyla IQueryAttributable alınan dize tabanlı sorgu parametresi değerleri otomatik olarak URL kodu çözülemez.
Birden çok veri öğesini geçirme ve işleme
Birden çok dize tabanlı sorgu parametresi &
ile bağlanarak 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, CollectionView içinde şu anda seçili olan fili alır ve elephantName
ve elephantLocation
sorgu parametreleri olarak geçirerek elephantdetails
rotasına gider.
Birden çok veri öğesi almak için, gidilmekte olan sayfayı temsil eden sınıf veya sayfanın BindingContext
sınıfı, dize tabanlı 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.
Uyarı
QueryPropertyAttribute kullanılarak gezinti verilerinin alınması güvenli değildir ve tam kırpma veya NativeAOT ile birlikte kullanılmamalıdır. Bunun yerine, sorgu parametrelerini kabul etmesi gereken türlerde IQueryAttributable arabirimini uygulamanız gerekir. Daha fazla bilgi için bkz . .NET MAUI uygulamasını kırpma ve Yerel AOT dağıtımı.
Alternatif olarak gezinti verileri, gezinilen sayfayı IQueryAttributable temsil eden sınıfta veya sayfanın sınıfı için BindingContext
arabirimi uygulanarak tek bir yöntemle işlenebilir:
public class ElephantDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
public Animal Elephant { get; private set; }
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
string name = HttpUtility.UrlDecode(query["name"].ToString());
string location = HttpUtility.UrlDecode(query["location"].ToString());
...
}
...
}
Bu örnekte, ApplyQueryAttributes
yöntemi URI içindeki name
ve location
sorgu parametre değerlerini GoToAsync yöntem çağrısından alır.
Not
Yol tabanlı gezinti gerçekleştirilirken dize tabanlı sorgu parametreleri ve nesne tabanlı gezinti parametreleri aynı anda geçirilebilir.
Geri düğmesi davranışı
Geri düğmesinin görünümü ve davranışı, bağlı özellik bir BackButtonBehavior nesnesine BackButtonBehavior ayarlanarak yeniden tanımlanabilir. BackButtonBehavior sınıfı aşağıdaki özellikleri tanımlar:
-
Command
, ICommand türünde olup, geri düğmesine basıldığında yürütülür. -
CommandParameter
,object
türündeki parametre olupCommand
öğesine geçirilir. -
IconOverride
, türünde ImageSource, geri düğmesi için kullanılan simge. -
IsEnabled
, türündekiboolean
, geri düğmesinin etkinleştirilip etkinleştirilmediğini gösterir. Varsayılan değer şudur:true
. -
IsVisible
, türündekiboolean
, geri düğmesinin görünür olup olmadığını gösterir. Varsayılan değer şudur:true
. -
TextOverride
, türündekistring
, 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. Veriler kaynaktan hedefe yalnızca BindingContext
değiştiğinde gider; her BindableProperty birinin bir OneTime
bağlama modu vardır.
Bu özelliklerin tümü nesneler tarafından BindableProperty desteklenir, bu da özelliklerin veri bağlamalarının hedefleri olabileceği anlamına gelir.
Command
, CommandParameter
, IconOveride
ve TextOveride
BindableProperty nesnelerinin OneTime
bağlama modları vardır, yani veriler kaynaktan hedefe yalnızca BindingContext
değiştiğinde gider. ve IsEnabled
IsVisible
nesnelerinin BindableProperty bağlama modları vardırOneWay
, bu da verilerin kaynaktan hedefe gittiğ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>
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: