今天繼續介紹Navigation
Navigation中的路由分為了絕對和相對的路由
絕對路由
ex. await Shell.Current.GoToAsync("//animals/monkeys");
導覽至monkeys的頁面,並在ShellContent物件上已經定義路由。 表示monkeys路由的 ShellContent為FlyoutItem子class,其路由是animals
相對路由
ex.await Shell.Current.GoToAsync("monkeydetails");
系統會搜尋階層中的monkeyDetails路由,直到找到相符的頁面為止
傳遞資料
前面我們提到在我們的TodoViewModel中
除了可以用dictionary來對我們註冊過的AddTodoPage路由傳遞參數
var navParam = new Dictionary<string, object>();
navParam.Add("TodoItem", todoItemModel);
await AppShell.Current.GoToAsync(nameof(AddTodoPage), navParam);
當我們要傳遞及處理多個資料時我們業能夠使用&
連接多個字串型查詢參數,來傳遞多個字串型查詢參數
ex.
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
string elephantLocation = (e.CurrentSelection.FirstOrDefault() as Animal).Location;
// 巡覽至elephantdetails路由,並傳遞elephantName和elephantLocation 作為查詢參數
await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}&location={elephantLocation}");
}
而要接收多個資料項目,我們能透過字串行查詢參數的裝飾符QueryPropertyAttribute
就如同我們的Todo\ViewModels\AddUpdateTodoViewModel.cs
裡定義了我們要查詢的參數TodoItem
並且透過加入Dictionary的方式將我們要用的傳遞參數給傳遞過去
var navParam = new Dictionary<string, object>();
navParam.Add("TodoItem", todoItemModel);
await AppShell.Current.GoToAsync(nameof(AddTodoPage), navParam);