25
MVVM FRAMEWORKS Egor Bogatov. Xamarin developer at Playtika.

MVVM frameworks

Embed Size (px)

DESCRIPTION

a bit about mvvm frameworks for WP8 and Windows Phone 8: Mvvm light, Caliburn.Micro, MvvmCross, Simple Mvvm

Citation preview

Page 1: MVVM frameworks

MVVM FRAMEWORKS

Egor Bogatov. Xamarin developer at Playtika.

Page 2: MVVM frameworks

Какие ваши преимущества?

•Testability

•Developer-designer workflow (blendability)

Page 3: MVVM frameworks

Is it popular?

Page 4: MVVM frameworks

Only for С#/XAML?

•WPF / Silverlight / WP8 / Windows Store / WinForms / iOS / Android / MAC

•JavaScript (Knockout, etc)•Java (ZK)

Page 5: MVVM frameworks

MVVM diagram

Page 6: MVVM frameworks

MVVM diagram - details

Page 7: MVVM frameworks
Page 8: MVVM frameworks

Typical MVVM Framework•BaseViewModel•ICommand implementations•Behaviors•ValueConverters•EventAggregator•IoC (ViewModelLocator)•Templates, snippets•“Donate” button

Page 9: MVVM frameworks

Popular MVVM Frameworks•MVVM Light•Caliburn.Micro•Simple MVVM•ReactiveUI•Catel•MvvmCross•…

Page 10: MVVM frameworks

MVVM Light

•BaseViewModel•RelayCommand•Messanger

Extra:•EventToCommand•SimpleIoc

Page 11: MVVM frameworks

Simple MVVM

•AssociateProperties• AssociateProperties(m => m.FirstName, vm =>

vm.CustomerName);•ViewModelDetailBase

• BeginEdit - Copy = Model.Clone()• CancelEdit - Model = Original;• EndEdit - Copy.CopyValuesTo(Original)

•MessageBus•“Cross-platform”

Page 12: MVVM frameworks

Caliburn.Micro

• MDD – Magic Driven Development

Page 13: MVVM frameworks
Page 14: MVVM frameworks
Page 15: MVVM frameworks
Page 16: MVVM frameworks
Page 17: MVVM frameworks

Caliburn.Micro: a bit more magic

<Button Content="Let's Talk" cal:Message.Attach="[Event MouseEnter] = [Action Talk('Hello', Name.Text)];[Event MouseLeave] = [Action Talk('Goodbye', Name.Text)]" />

Page 18: MVVM frameworks

Caliburn.Micro: tombstone

public class MainPageModelStorage: StorageHandler<MainPageViewModel>{    public override void Configure()    {        Property(x => x.Name)            .InAppSettings();    }}

Page 19: MVVM frameworks

Caliburn.Micro: navigation

   navigationService.UriFor<Page2ViewModel>()                     .WithParam(x => x.Name, "Test")                     .Navigate();

Page 20: MVVM frameworks

MvvmCross

•Cross-platform•PCL ViewModels•Plugins

Page 21: MVVM frameworks

MvvmCross: navigation• %Name%ViewModel - %Name%View

• ShowViewModel<FooViewModel>(new {key = “foo”})) FooViewModel: public void Init(string key) { }

Page 22: MVVM frameworks

MvvmCross: tombstone•LoadStateBundle

•SaveStateBundle•bundle.Data[“Name”] = _name;•bundle.Data[“Id”] = _id;

Page 24: MVVM frameworks

Text binding

Page 25: MVVM frameworks

Command binding