我是UWP開發人員(設計目標手機)的新手,現在我正在開發一個使用它的應用程序(在Android開發方面有經驗)。應用程序被設計爲單頁應用程序,其中有一張地圖和另外的菜單,按鈕和欄位:它們基於某種邏輯出現和消失。許多這樣的控件在運行時渲染或填充(如果可能的話viewmodel越來越多,不需要/部分使用xaml,只是在c#中),因爲它是從API加載的。困境是page class(也就是xaml one)越來越大,我不確定如何正確分離它(我不是指部分類),因爲並非所有這些控件都在應用程序啓動時加載(現在它們是,我崩潰/可見需要)。例如,在Android術語中,片段可以用動畫等替換/覆蓋彼此。現在,我有一個擴展類,在那裏我與API交互,並且只向頁面類發送回調,但這還不夠=)UWP應用程序架構困境
回答
降低頁面複雜度的一種方法是將其分解爲單獨的UserControls。結合MVVM pattern,你也可以在多視圖模型類中分離視圖邏輯。
作爲一個例子,假設您的頁面中有一個主細節佈局,假設此視圖顯示用戶信息。您將有三個不同的觀點:
- 用戶視圖(繼承頁) - 活動在android系統
- UserListView(繼承用戶控件) - 片段的Android
- UserDetailsView(繼承用戶控件) - 片段的Android
以及三個獨立的視圖模型。有一些挑戰,這種模式:
你的觀點需要傳達給對方
通信。例如,當您在UserListView中選擇一個用戶時,UserDetailsView需要更新並顯示所選用戶的詳細信息。
至少有三種方式在這些視圖之間進行通信:
- 瀏覽通過方法和依賴屬性直接調用彼此
- 瀏覽通過模型
- 視圖通過其視圖間接通信間接通信 - 模型物體
我通常選擇第一種和第二種方法,而不是第三種方法。
共享UI資源
視圖在一個頁面可能需要使用共享資源頁面,例如命令欄。例如,UserListView可能需要在命令欄上有一個Add(+)按鈕,而UserDetailsView也可能需要幾個按鈕。這將是你處理這種情況的挑戰。
您可以使用MVVM Pattern分離你的邏輯。
https://blogs.msdn.microsoft.com/johnshews_blog/2015/09/09/a-minimal-mvvm-uwp-app/
您可以使用XAML的力量來隱藏或顯示您根據需要控制的業務規則,使用綁定或x:綁定
使用MVVM模式是創建XAML基於應用的最佳實踐像UWP,WPF。
正如你可以閱讀我已經在使用mvvm模式可能=)Dilema不是綁定或有點,它是控制和邏輯的數量。梅爾扎德Cherhaz建議一個很好的解決方案,我會去嘗試它,並關閉問題,如果這我會滿意。 – doubledeath
- 1. ClickOnce應用程序部署困境
- 2. 是否有可能使用境界反應爲Windows UWP構建應用程序?
- 3. Android應用程序架構
- 4. Web應用程序架構?
- 5. Silverlight應用程序架構
- 6. Linux程序集的困境
- 7. VB.NET應用程序重構架構
- 8. 我的新Android應用程序的API使用困境
- 9. UWP應用程序崩潰
- 10. UWP應用程序安裝
- 11. 硒與UWP應用程序?
- 12. 在構建服務器上構建UWP應用程序/庫
- 13. Rails應用程序和多語言內容,模型困境
- 14. Rails應用程序對環境感到困惑嗎?
- 15. 應用程序內購買 - 消耗品物品困境
- 16. VB.NET ASP.NET Web應用程序的困境(VS 2008)
- 17. DRY編程困境
- 18. 個人應用程序的URL架構
- 19. ASP.Net MVC應用程序URL架構
- 20. Ajax Django應用程序架構
- 21. 架構ASPNET MVC Web應用程序
- 22. 構建Web應用程序的框架
- 23. 架構春天MVC +角應用程序
- 24. ASP.Net Web應用程序架構
- 25. CRM架構(開源應用程序)
- 26. asp.net應用程序/ IIS架構
- 27. Web應用程序架構的問題
- 28. 移動應用程序架構
- 29. 應用程序開發架構
- 30. 架構更大的應用程序
降低頁面複雜度的一種方法是將其分解爲單獨的[UserControls](https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.usercontrol)。 –
@Mehrzad Chehraz,我想到了自定義控件,但在我看來,它們似乎並不完全適合這種情況。我認爲自定義控件必須是可重用的,在我的情況下會有很多控件只是一次性使用邏輯。在Android的片段存在我的情況=)無論如何,這可能是解決方案,所以請通過它的意見作爲答案,所以可以標記它,如果我會滿意後嘗試=)(也許他們有一些問題,在點擊覆蓋或左右) – doubledeath
我加了答案。然而,我無法理解你使用UserControl的問題,就像android中的片段一樣。如果你給我更多的細節,我會更新我的答案。 –