日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二十四章:页面导航(五)

發布時間:2025/4/5 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二十四章:页面导航(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導航變化

當您嘗試使用ModalEnforcement和MvvmEnforcement程序時,您可能會對模態頁面未能保留任何信息感到不安。我們都遇到了導航到用于輸入信息的頁面的程序和網站,但是當您離開該頁面然后再返回時,您輸入的所有信息都消失了!這樣的頁面可能非常煩人。
即使在像ModalEnforcement和MvvmEnforcement這樣的簡單演示示例中,也可以通過僅創建模態頁面的單個實例(可能在程序啟動時 - 然后在整個過程中使用該單個實例)來非常輕松地解決該問題。
盡管這種解決方案顯而易見,但它對于保留頁面信息的問題并不是一個很好的通用方法。除最簡單的情況外,應該避免使用這種技術。保持大量頁面處于活動狀態可能會導致內存問題,您必須小心避免在導航堆棧中多次使用相同的頁面實例。
不過,這里是如何修改此技術的ModalEnforcementHomePage代碼隱藏文件:

public partial class ModalEnforcementHomePage : ContentPage {ModalEnforcementModalPage modalPage = new ModalEnforcementModalPage();public ModalEnforcementHomePage(){InitializeComponent();}async void OnGoToButtonClicked(object sender, EventArgs args){await Navigation.PushModalAsync(modalPage);} }

ModalEnforcementHomePage將ModalEnforcementModalPage的實例保存為字段,然后始終將該單個實例傳遞給PushModalAsync。
在不太簡單的應用程序中,這種技術很容易出錯:有時,應用程序中的特定類型的頁面可以從幾個不同的頁面導航到,這可能會導致兩個單獨的,不一致的ModalPage實例。
如果您需要在程序終止時保存程序的狀態并在程序再次執行時將其還原,則此技術將完全崩潰。您無法自行保存和還原頁面實例。通常是與頁面關聯的數據必須保存。
在現實生活中,ViewModels通常構成多頁面應用程序中頁面類型的主干,而應用程序保留頁面數據的最佳方式是通過ViewModel而不是頁面。
使用MvvmEnforcement可以演示在連續多次調用模式頁面時維護頁面狀態的更好方法。首先,將屬性添加到LittleViewModel的App頁面,并在App構造函數中實例化該類:

namespace MvvmEnforcement {public class App : Application{public App(){ModalPageViewModel = new LittleViewModel();MainPage = new NavigationPage(new MvvmEnforcementHomePage());}public LittleViewModel ModalPageViewModel { private set; get; }__} }

由于LittleViewModel僅實例化一次,因此它會在應用程序的持續時間內維護信息。 然后,MvvmEnforcementModalPage的每個新實例都可以簡單地訪問此屬性并將ViewModel對象設置為其BindingContext:

public partial class MvvmEnforcementModalPage : ContentPage {public MvvmEnforcementModalPage(){InitializeComponent();LittleViewModel viewModel = ((App)Application.Current).ModalPageViewModel;BindingContext = viewModel;// Populate Picker Items list.foreach (string language in viewModel.Languages){picker.Items.Add(language);}}__ }

當然,一旦程序終止,信息就會丟失,但App類也可以將這些信息保存在Application的Properties屬性中 - 這是第6章“按鈕點擊”結束時PersistentKeypad程序中首次演示的技術 - 和 然后在應用程序再次啟動時檢索它。
保留數據和在頁面之間傳遞數據的問題將占據本章后面部分的重點。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的第二十四章:页面导航(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。