.NET MAUI Kabuğu gezintisi
.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 düğmesinin davranışını tanımlayan ekli bir özelliktir.
-
CurrentItem
, türüneShellItem
göre seçili durumdaki öğedir. -
CurrentPage
, türündeki Page, şu anda sunulan sayfadır. -
CurrentState
, türündekiShellNavigationState
geçerli gezinti durumu Shell. -
Current
, türündeki Shellgeç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 olay Navigating
tetiklenir ve Navigated
gezinti tamamlandığında 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 bkz . Modsuz gezinti gerçekleştirme.
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 , FlyoutItem, TabBarve Tab nesnelerinde ShellContentRoute
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 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 değiştirilebilir. Bu tür sayfaların yolları genel yollar olarak bilinir.
Uyarı
yöntemi aynı yolu iki veya daha fazla farklı türe kaydetmeyi denerse ArgumentException
bir Routing.RegisterRoute
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 aracılığıyla Shell.Current
alınabilir. Daha sonra nesnede GoToAsync yöntemi çağrılarak Shell 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 string
öğesinden Uri
oluşturulur ve özelliği veya Location
bağımsız değişkenine string
ayarlanmıştırUri
.
Ö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
.
Uyarı
Mutlak yollar, Routing.RegisterRoute
yöntemiyle kaydedilen sayfalarla çalışmaz.
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 URI olarak belirtilerek gerçekleştirilebilir.
Aşağıdaki örnek, yolun sayfasına monkeydetails
gider:
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 AppShell.xamlolan alt sınıf Shell 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 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 DebuggerDisplayAttribute
veya 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:
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.
Gezinti yığını
Tab sınıfı, içindeki Stack
geçerli gezinti yığınını temsil eden türünde IReadOnlyList<Page>
bir Tab ö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ürIReadOnlyList<Page>
. -
OnInsertPageBefore
, çağrıldığındaINavigation.InsertPageBefore
çağrılır. -
OnPopAsync
Task<Page>
, döndürür ve çağrıldığındaINavigation.PopAsync
çağrılır. -
OnPopToRootAsync
Task
, döndürür ve çağrıldığındaINavigation.OnPopToRootAsync
çağrılır. -
OnPushAsync
Task
, döndürür ve çağrıldığındaINavigation.PushAsync
çağrılır. -
OnRemovePage
, çağrıldığındaINavigation.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.
Gezinti olayları
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 Source
özelliklere sahiptirShellNavigationSource
. 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();
}
}
Gezinti erteleme
Kabuk gezintisi, kullanıcı seçimine göre kesilebilir, tamamlanabilir veya iptal edilebilir. Bu, alt sınıfınızdaki OnNavigating
yöntemi geçersiz kılarak Shell ve nesnesi üzerinde GetDeferral
ShellNavigatingEventArgs
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();
}
}
Bu örnekte, kullanıcıyı gezinti isteğini tamamlamaya veya iptal etmeye davet eden bir eylem sayfası görüntülenir. Nesnede yöntemi Cancel
çağrılarak ShellNavigatingEventArgs
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 geçirme
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, içinde seçili durumdaki CollectionViewfili alır ve sorgu parametresi olarak geçirerek elephantdetails
yola giderelephantName
.
Birden çok kullanım nesne tabanlı gezinti verisi geçirme
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, içinde seçili durumdaki ayıyı CollectionViewolarak Animal
alır.
Animal
nesnesi anahtarıyla Dictionary
öğesine Bear
eklenir. Ardından, gezinti beardetails
parametresi olarak geçirilmekte olan rotaya Dictionary
gezinti gerçekleştirilir.
Bağımsız değişken olarak IDictionary<string, object>
geçirilen veriler, sayfanın ömrü boyunca bellekte tutulur ve sayfa gezinti yığınından kaldırılana kadar yayımlanmaz. Bu, aşağıdaki senaryoda gösterildiği gibi sorunlu olabilir:
-
Page1
Page2
yöntemini kullanarak GoToAsync öğesine gider ve adlıMyData
bir nesneyi geçirir.Page2
ardından sorgu parametresi olarak alırMyData
. -
Page2
Page3
herhangi bir veri geçirmeden yöntemini kullanmaya GoToAsync gider. -
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 yöntemiyle IDictionary<string, object>
bağımsız değişkeni temizlemeniz Clear
gerekir.
Tek kullanımlık nesne tabanlı gezinti verilerini geçirme
Tek kullanımlık nesne tabanlı gezinti verileri, bağımsız değişken belirten GoToAsync bir ShellNavigationQueryParameters aşırı yüklemeyle geçirilebilir. Nesne ShellNavigationQueryParameters , gezinti gerçekleştikten sonra temizlenen tek kullanımlık gezinti verilerine yöneliktir. 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);
}
Bu örnek, nesneye eklenen bir CollectionView olarak içinde Animal
seçili durumdaki ayıyı ShellNavigationQueryParameters alır. Ardından, nesne bir gezinti beardetails
parametresi olarak geçirilirken, rotaya ShellNavigationQueryParameters gezinti gerçekleştirilir. 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. - Gidilmekte olan sayfayı temsil eden sınıf veya sayfanın
BindingContext
sı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 dize tabanlı sorgu parametresi, nesne tabanlı gezinti parametresi veya QueryPropertyAttribute nesne için bir ShellNavigationQueryParameters ile süslenerek 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 arabirimini uygulamanız IQueryAttributable gerekir. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme, .NET MAUI uygulamasını kırpma 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. 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 query
bir IDictionary<string, object>
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 ö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, object> query)
{
Monkey = query["Monkey"] as Animal;
OnPropertyChanged("Monkey");
}
...
}
Bu örnekte yöntemi, ApplyQueryAttributes
yöntem çağrısına Monkey
bağımsız değişken olarak geçirilen sözlükteki query
anahtara GoToAsync karşılık gelen nesneyi alır.
Ö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
ile bağlanarak &
birden çok dize tabanlı 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 elephantdetails
elephantName
rotaya elephantLocation
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ı
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 arabirimini uygulamanız IQueryAttributable gerekir. Daha fazla bilgi için bkz . .NET MAUI uygulamasını ve Yerel AOT dağıtımını kırpma.
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 yöntemi, ApplyQueryAttributes
yöntem çağrısındaki name
URI'den ve location
sorgu parametrelerinin GoToAsync değerini 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üğ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ündekiobject
parametresineCommand
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. Her BindableProperty birinin bir OneTime
bağlama modu vardır, yani veriler kaynaktan hedefe gider, ancak yalnızca değişiklikler olduğunda BindingContext
.
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 bağlama modları vardırOneTime
, yani veriler kaynaktan hedefe gider, ancak yalnızca değişiklikler olduğundaBindingContext
. 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: