TOC
W post 7 framework-ów MVVM jakie możecie wybrać przedstawiłem wam kilka możliwych opcji do wyboru jeżeli chodzi o MVVM. Dzisiaj chciałbym przedstawić jeden z nich FreshMVVM.
Jak zacząć z FreshMVVM w Xamarin Forms? FreshMVVM jest prostym i mały framework-iem stworzonym specjalnie na potrzeby Xamarin Forms. Jego autorem jest Michael Ridland.
Naszym przykładem jaki wykorzystam będzie prosta aplikacja Todo.
`
A więc zaczynamy.
FreshMVVM struktura
FreshMVVM stosuje koncepcję „Convetion over Configuration” dlatego też ważna jest struktura naszego projektu.
Koncepcje jakie są ważne to:
- Page – nasza strona, którą tworzymy w XAML
- PageModel – nasz ViewModel, który odpowiada za całą obsługę całej logiki aplikacji
A więc tworzymy nasz projekt przez File -> New -> Project lub CTRL+SHIFT+N, wybieramy szablon Blank Xaml App (Xamarin.Forms Portable).
Pobieramy z NuGet pakiety FreshMVVM i PropertyChanged.Fody. Uruchamiamy konsolę Package Manager Console i piszemy
Kolejnym krokiem jest stworzenie struktury projektu
Tworzymy katalogi Models, PageModels i Pages będą nam one potrzebne do trzymania się konwencji jaka jest używana w FreshMVVM.
- Models – tutaj trzymamy nasze klasy POCO np. pobrane przez HTTP
- PageModels – tutaj trzymamy nasze klasy VM
- Pages – tutaj trzymamy nasze strony
Trochę kodu
A więc tworzymy naszą pierwszą stronę TodoItemPage wybieramy folder w Solution Explorer i Add -> New Item -> wybieramy szablon Forms Xaml Page lub CTRL + SHIFT + A.
Strona TodoItemPage wygląda jak na listingu
[code lang=”csharp”]
Jak widzicie mamy stworzone już Binding-i w naszym kodzie XAML. Teraz zajmiemy się naszym PageModel.
Jak poprzednio w katalogu PageModels dodajemy pustą klasę C# TodoItemPageModel, ważne jest tutaj nazewnictwo żeby zadziałał nam automatyczny binding. Musi ona dziedziczyć po FreshBasePageModel.
Klasa TodoItemPageModel listing
[code lang=”csharp”]
using FreshMvvm;
using FreshTodoApp.Models;
using Xamarin.Forms;
using PropertyChanged;
namespace FreshTodoApp.PageModels
{
[ImplementPropertyChanged]
public class TodoItemPageModel : FreshBasePageModel
{
public TodoItem Todo { get; set; }
public Command SaveCommand
{
get
{
return new Command(async () =>
{
await CoreMethods.DisplayAlert(“Info”, $“Create task with name {Todo.Name}”, “Ok”);
});
}
}
public override void Init(object initData)
{
Todo = initData as TodoItem;
if (Todo == null)
Todo = new TodoItem();
}
}
}
[/code]
Dla formalności TodoItem wygląda następująco
[code lang=”csharp”]
using PropertyChanged;
namespace FreshTodoApp.Models
{
[ImplementPropertyChanged]
public class TodoItem
{
public int Id { get; set; }
public string Name { get; set; }
public string Note { get; set; }
public bool Done { get; set; }
}
}
[/code]
FreshPageModelResolver
Żeby to wszystko zadziałało z pomocą przychodzi nam FreshPageModelResolver. Odpowiada on za powiązanie PageModel z odpowiednim Page.
W App.xaml.cs dodajemy linijkę
[code lang=”csharp”]
MainPage = FreshMvvm.FreshPageModelResolver.ResolvePageModel();
[/code]
Więc jak widzicie w całkiem szybki sposób otrzymujemy działającą aplikację zgodną ze wzorcem MVVM. Pytanie takie do was czy używaliście gdzieś produkcyjnie FreshMVVM?
真诚赞赏,手留余香
使用微信扫描二维码完成支付
comments powered by Disqus