实例介绍
Xamvvm是一款为Xamarin.Forms设计的MVVM框架,它以其简单、快速和轻量级著称,通过流畅的API使得开发过程更加便捷。
功能特点:
- 使用非常简单,只需标记页面/模型即可
- 以PageModel为导向的导航
- 自动绑定BindingContext(PageModels)
- 页面/页面模型缓存,提升UI响应速度
- 不限于任何具体的页面、页面模型实现
- 流畅风格的扩展方法,减少代码编写
- ContentView内的导航
- 提供INotifyPropertyChanged实现的辅助类,例如BasePageModel
- 页面有覆盖方法来响应/拦截导航
- 类型安全的类/方法/消息传递
- 防止未完成执行时多次执行的无依赖ICommand实现
快速开始:
初始化框架只需创建IBaseFactory实现的实例,并将其设置为当前使用的工厂即可。
示例代码:
var factory = new XamvvmFormsFactory(this); XamvvmCore.SetCurrentFactory(factory);这样就完成了初始化。PageFactory会在启动时扫描你的程序集,并根据你页面上的IBasePage定义将页面和页面模型链接起来。
页面模型优先的导航:
所有推送和弹出操作都是从PageModel进行,而不是从页面。
示例代码:
var pageToPush = this.GetPageFromCache<DetailPageModel>(); await this.PushPageAsync(pageToPush);你也可以在显示页面前执行一个动作。
【实例截图】
【核心代码】
文件清单
└── xamvvm-e3e38ff88ca998601c779d1f1bd60b0dd988f0a7
├── appveyor.yml
├── examples
│ ├── ExamplesForms
│ │ ├── Droid
│ │ │ ├── Assets
│ │ │ │ └── AboutAssets.txt
│ │ │ ├── Examples.Droid.csproj
│ │ │ ├── Examples.Droid.csproj.bak
│ │ │ ├── MainActivity.cs
│ │ │ ├── packages.config
│ │ │ ├── Properties
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── Resources
│ │ │ ├── AboutResources.txt
│ │ │ ├── drawable
│ │ │ │ └── icon.png
│ │ │ ├── drawable-hdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xhdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xxhdpi
│ │ │ │ └── icon.png
│ │ │ ├── layout
│ │ │ │ ├── Tabbar.axml
│ │ │ │ └── Toolbar.axml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ ├── Examples
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── Examples.csproj
│ │ │ ├── FodyWeavers.xml
│ │ │ ├── Pages
│ │ │ │ ├── DemoListViewPageModel.cs
│ │ │ │ ├── DemoListViewPage.xaml
│ │ │ │ ├── DemoListViewPage.xaml.cs
│ │ │ │ ├── DetailPageModel.cs
│ │ │ │ ├── DetailPage.xaml
│ │ │ │ ├── DetailPage.xaml.cs
│ │ │ │ ├── MainNavigationPageModel.cs
│ │ │ │ ├── MainPageModel.cs
│ │ │ │ ├── MainPage.xaml
│ │ │ │ ├── MainPage.xaml.cs
│ │ │ │ ├── SampleMasterDetailMenuPageModel.cs
│ │ │ │ ├── SampleMasterDetailMenuPage.xaml
│ │ │ │ ├── SampleMasterDetailMenuPage.xaml.cs
│ │ │ │ ├── SampleMasterDetailPage.cs
│ │ │ │ ├── SampleMasterDetailPageModel.cs
│ │ │ │ ├── SampleNavigationViewNavigation.cs
│ │ │ │ ├── SampleNavigationViewPageModel.cs
│ │ │ │ ├── SampleNavigationViewPage.xaml
│ │ │ │ └── SampleNavigationViewPage.xaml.cs
│ │ │ └── Views
│ │ │ ├── SampleFirstViewModel.cs
│ │ │ ├── SampleFirstView.xaml
│ │ │ ├── SampleFirstView.xaml.cs
│ │ │ ├── SampleSecondViewModel.cs
│ │ │ ├── SampleSecondView.xaml
│ │ │ └── SampleSecondView.xaml.cs
│ │ ├── iOS
│ │ │ ├── AppDelegate.cs
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Entitlements.plist
│ │ │ ├── Examples.iOS.csproj
│ │ │ ├── Info.plist
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── Main.cs
│ │ │ └── packages.config
│ │ └── WinUWP
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Assets
│ │ │ ├── LockScreenLogo.scale-200.png
│ │ │ ├── SplashScreen.scale-200.png
│ │ │ ├── Square150x150Logo.scale-200.png
│ │ │ ├── Square44x44Logo.scale-200.png
│ │ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ │ ├── StoreLogo.png
│ │ │ └── Wide310x150Logo.scale-200.png
│ │ ├── ExamplesForms.Win_TemporaryKey.pfx
│ │ ├── Examples.Windows.csproj
│ │ ├── Examples.Windows.nuget.targets
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Package.appxmanifest
│ │ ├── project.json
│ │ ├── project.lock.json
│ │ └── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ ├── ExamplesFormsRxUI
│ │ ├── ExamplesRxUI
│ │ │ ├── App.xaml
│ │ │ ├── App.xaml.cs
│ │ │ ├── ExamplesRxUI.csproj
│ │ │ └── Pages
│ │ │ ├── DemoListViewPageModel.cs
│ │ │ ├── DemoListViewPage.xaml
│ │ │ └── DemoListViewPage.xaml.cs
│ │ ├── ExamplesRxUI.Droid
│ │ │ ├── Assets
│ │ │ │ └── AboutAssets.txt
│ │ │ ├── ExamplesRxUI.Droid.csproj
│ │ │ ├── ExamplesRxUI.Droid.csproj.bak
│ │ │ ├── MainActivity.cs
│ │ │ ├── packages.config
│ │ │ ├── Properties
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── Resources
│ │ │ ├── AboutResources.txt
│ │ │ ├── drawable
│ │ │ │ └── icon.png
│ │ │ ├── drawable-hdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xhdpi
│ │ │ │ └── icon.png
│ │ │ ├── drawable-xxhdpi
│ │ │ │ └── icon.png
│ │ │ ├── layout
│ │ │ │ ├── Tabbar.axml
│ │ │ │ └── Toolbar.axml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ ├── ExamplesRxUI.iOS
│ │ │ ├── AppDelegate.cs
│ │ │ ├── Entitlements.plist
│ │ │ ├── ExamplesRxUI.iOS.csproj
│ │ │ ├── Info.plist
│ │ │ ├── iTunesArtwork
│ │ │ ├── iTunesArtwork@2x
│ │ │ ├── Main.cs
│ │ │ ├── packages.config
│ │ │ ├── Properties
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── Resources
│ │ │ ├── Default@2x.png
│ │ │ ├── Default-568h@2x.png
│ │ │ ├── Default.png
│ │ │ ├── Default-Portrait@2x.png
│ │ │ ├── Default-Portrait.png
│ │ │ ├── Icon-60@2x.png
│ │ │ ├── Icon-60@3x.png
│ │ │ ├── Icon-76@2x.png
│ │ │ ├── Icon-76.png
│ │ │ ├── Icon-Small@2x.png
│ │ │ ├── Icon-Small@3x.png
│ │ │ ├── Icon-Small-40@2x.png
│ │ │ ├── Icon-Small-40@3x.png
│ │ │ ├── Icon-Small-40.png
│ │ │ ├── Icon-Small.png
│ │ │ └── LaunchScreen.storyboard
│ │ └── ExamplesRxUI.UWP
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Assets
│ │ │ ├── LockScreenLogo.scale-200.png
│ │ │ ├── SplashScreen.scale-200.png
│ │ │ ├── Square150x150Logo.scale-200.png
│ │ │ ├── Square44x44Logo.scale-200.png
│ │ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ │ ├── StoreLogo.png
│ │ │ └── Wide310x150Logo.scale-200.png
│ │ ├── ExampleRxUI.UWP.csproj
│ │ ├── ExampleRxUI.UWP.nuget.targets
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Package.appxmanifest
│ │ ├── project.json
│ │ ├── project.lock.json
│ │ ├── Properties
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── Default.rd.xml
│ │ └── Windows_TemporaryKey.pfx
│ └── ExampleUnitTests.Droid
│ ├── Assets
│ │ └── AboutAssets.txt
│ ├── ExampleUnitTests.Droid.csproj
│ ├── ExampleUnitTests.Droid.csproj.bak
│ ├── MainActivity.cs
│ ├── MainActivity.cs.txt
│ ├── packages.config
│ ├── Properties
│ │ ├── AndroidManifest.xml
│ │ └── AssemblyInfo.cs
│ ├── Resources
│ │ ├── AboutResources.txt
│ │ ├── drawable
│ │ │ └── Icon.png
│ │ ├── layout
│ │ │ └── Main.axml
│ │ └── values
│ │ └── Strings.xml
│ └── ViewModelUnitTest.cs
├── GitLink.exe
├── LICENSE
├── MakefileAll.bat
├── README.md
└── source
├── Xamvvm.Core
│ ├── Attributes
│ │ └── DisableCacheAttribute.cs
│ ├── Exceptions
│ │ ├── NoPageForPageModelRegisteredException.cs
│ │ ├── PageTypeNotRegisteredInIOCException.cs
│ │ └── XamvvmException.cs
│ ├── Extensions
│ │ ├── CachingExtensions.cs
│ │ ├── LoggingExtensions.cs
│ │ ├── NavigationExtensions.cs
│ │ ├── PageExtensions.cs
│ │ └── PageModelExtensions.cs
│ ├── Implementations
│ │ ├── BaseCommand.cs
│ │ ├── BaseLogger.cs
│ │ ├── BaseModel.cs
│ │ ├── BaseNotifyPropertyChanged.cs
│ │ ├── BasePageModel.cs
│ │ └── BaseViewModel.cs
│ ├── Interfaces
│ │ ├── IBaseCommand.cs
│ │ ├── IBaseFactoryCaching.cs
│ │ ├── IBaseFactory.cs
│ │ ├── IBaseFactoryNavigation.cs
│ │ ├── IBaseLogger.cs
│ │ ├── IBasePage.cs
│ │ ├── IBasePageModel.cs
│ │ ├── IBaseView.cs
│ │ ├── IBaseViewModel.cs
│ │ ├── INavigationInterceptors.cs
│ │ └── IPageVisibilityChange.cs
│ ├── IoC
│ │ ├── IXamvvmIoC.cs
│ │ ├── SimpleXamvvmIoC.cs
│ │ ├── TinyIoC.cs
│ │ └── XamvvmIoC.cs
│ ├── XamvvmCore.cs
│ └── Xamvvm.Core.csproj
├── Xamvvm.Core.nuspec.template
├── Xamvvm.Forms
│ ├── Behaviors
│ │ ├── BaseBehavior.cs
│ │ └── BaseEventToCommandBehavior.cs
│ ├── Extensions
│ │ └── ApplicationExtensions.cs
│ ├── Factory
│ │ ├── FactoryCaching.cs
│ │ ├── Factory.cs
│ │ ├── FactoryNavigation.cs
│ │ └── XamvvmFormsFactory.cs
│ ├── Pages
│ │ ├── BaseCarouselPage.cs
│ │ ├── BaseMasterDetailPage.cs
│ │ ├── BaseNavigationPage.cs
│ │ └── BaseTabbedPage.cs
│ ├── Views
│ │ ├── IViewNavigation.cs
│ │ └── ViewNavigation.cs
│ └── Xamvvm.Forms.csproj
├── Xamvvm.Forms.nuspec.template
├── Xamvvm.Forms.RxUI
│ ├── IBasePageRxUI.cs
│ ├── Implementations
│ │ ├── BaseContentPageRxUI.cs
│ │ ├── BaseMasterDetailPageRxUI.cs
│ │ ├── BaseNavigationPageRxUI.cs
│ │ ├── BasePageModelRxUI.cs
│ │ └── BaseTabbedPageRxUI.cs
│ ├── Xamvvm.Forms.RxUI.csproj
│ └── XamvvmFormsRxUIFactory.cs
├── Xamvvm.Forms.RxUI.nuspec.template
├── Xamvvm.Mock
│ ├── Factory
│ │ ├── ActionResults.cs
│ │ ├── FactoryCaching.cs
│ │ ├── Factory.cs
│ │ ├── FactoryNavigation.cs
│ │ └── XamvvmMockFactory.cs
│ ├── MockPage.cs
│ ├── MyClass.cs
│ └── Xamvvm.Mock.csproj
├── Xamvvm.Mock.nuspec.template
├── Xamvvm.sln
└── XamvvmTemplatePack.VSMac
├── ItemTemplates
│ ├── CustomContentPageModel.cs
│ ├── CustomContentPage.xaml
│ ├── CustomContentPage.xaml.cs
│ ├── CustomContentPage.xft.xml
│ ├── CustomContentViewModel.cs
│ ├── CustomContentView.xaml
│ ├── CustomContentView.xaml.cs
│ └── CustomContentView.xft.xml
├── packages.config
├── Properties
│ ├── AddinInfo.cs
│ ├── AssemblyInfo.cs
│ └── Manifest.addin.xml
└── XamvvmTemplatePack.VSMac.csproj
69 directories, 235 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论