{"id":21145500,"url":"https://github.com/codemillmatt/four-beautiful-apps","last_synced_at":"2025-03-14T13:42:47.124Z","repository":{"id":89789408,"uuid":"151474612","full_name":"codemillmatt/four-beautiful-apps","owner":"codemillmatt","description":"Repo for the Creating Four Beautiful Apps at Once Talk","archived":false,"fork":false,"pushed_at":"2018-10-10T17:34:03.000Z","size":11277,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-21T07:27:41.745Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codemillmatt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-03T20:14:57.000Z","updated_at":"2018-10-08T20:30:40.000Z","dependencies_parsed_at":"2024-05-03T10:33:19.896Z","dependency_job_id":null,"html_url":"https://github.com/codemillmatt/four-beautiful-apps","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemillmatt%2Ffour-beautiful-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemillmatt%2Ffour-beautiful-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemillmatt%2Ffour-beautiful-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemillmatt%2Ffour-beautiful-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codemillmatt","download_url":"https://codeload.github.com/codemillmatt/four-beautiful-apps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243589272,"owners_count":20315467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T08:41:13.349Z","updated_at":"2025-03-14T13:42:47.103Z","avatar_url":"https://github.com/codemillmatt.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Creating Four Beautiful Apps at Once with Xamarin.Forms\n\nYou read that title correct – you can create an app for iOS, Android, macOS, and UWP simultaneously using Xamarin.Forms.\n\n[Xamarin.Forms](https://msou.co/bnx) has come a long way since the days of when its recommended use was only for simple apps and prototyping. In this session, Matt will show you the advances in Xamarin.Forms and how to utilize them to create beautiful apps yourself.\n\nYou will see the basic structure of a Xamarin.Forms app and how to use XAML and the built-in controls to create a UI. You'll learn about the MVVM pattern and data binding so information can be presented and modified between the UI and logic layer with ease. You'll walk through accessing platform specific native controls – from XAML! At the end of this session, you'll be able to create a beautiful app - make that four beautiful apps – with Xamarin.Forms!\n\n## Slides\n\n[Here you go!](slides/BeautifulApps.pdf)\n\n## Demos\n\n### UI Demo\n\nIn this first demo we took a look at the [basic project structure](https://msou.co/bny) for a Xamarin.Forms app. Noting how each of the platform projects (or the iOS and Android) had their own projects - this way you can still make changes to them. While the shared UI and logic had it's own project which the [platform projects reference](https://msou.co/bnz). This way all the shared code is ... well ... shared\n\nAfter that, we explored the app we'll use for the demo throughout the talk and the [common user controls](https://msou.co/bn1) that make up a Xamarin.Forms app.\n\n- The [`ListView`](https://msou.co/bn3) which displays items from an enumerable.\n- The [`Label`](https://msou.co/bn4) which do as the they're named - display data.\n- The [`TableView`](https://msou.co/bn7) which is a great way to accept data in an ordered fashion.\n- [`Entry`](https://msou.co/bn5) and [`Editor`](https://msou.co/bn6) controls - single line and multi-line text entry.\n- [`Buttons`](https://msou.co/bn2) - those things that you click on.\n\n### MVVM Demo\n\nOne of the things that makes Xamarin.Forms great is the built-in MVVM framework. MVVM is just like MVC - just with more V's and less C's. :)\n\nA major portion of MVVM is the [data binding](https://msou.co/bn0). This is where you map a value in a control to a variable in in the logic layer. Then, whenever one changes - the other updates automatically!\n\nAnother portion is [commanding](https://msou.co/bn8). It's very similar to data binding, but instead of tying a variable to a value of a control, you tie a control's event to an action behind the scenes. So not only will Forms take care of subscribing and unsubscribing to the event for you (so no memory leaks), but you can also automatically specify when the action is valid - or when the event is available to be fired (based on other variables), and the framework will automatically take care of enabling or disabling the control for you.\n\n### CSS Demo\n\nOne of the new features added in Xamarin.Forms 3.0 is the ability to style your controls using [CSS](https://msou.co/bn9). Yes, that [CSS](https://msou.co/bn9)!\n\nIf you're familiar with CSS from the web, you'll feel right at home with the Xamarin.Forms syntax of CSS.\n\nThere are subtle differences when styling controls versus setting the properties directly - such as not all of the Xamarin.Forms properties are available to be styled, and the names of the property names are different when setting them in CSS - but all in all they obey the usual CSS syntax.\n\nAll of the selectors that you're used to are available, such as class selectors, control type selectors, and element ID selectors. And the cascading rules of CSS also apply as well!\n\n## Summary\n\nXamarin.Forms is a great way to build an app by writing your UI once, using the most commonly used controls and their events. However, you're not limited to only to the common controls that Forms provides, you can also access [platform specific features](https://msou.co/bnz) easily too.\n\nForms also provides a full featured MVVM framework, a [messaging service](https://msou.co/boa), a [dependency service](https://msou.co/bob), [CSS](https://msou.co/bn9) styling, and an [animation API](https://msou.co/boc) as well.\n\nAll in all, when considering building your next app, Forms merits a look!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemillmatt%2Ffour-beautiful-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodemillmatt%2Ffour-beautiful-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemillmatt%2Ffour-beautiful-apps/lists"}