MVVM frameworks
-
Upload
egor-bogatov -
Category
Software
-
view
1.780 -
download
4
description
Transcript of MVVM frameworks
MVVM FRAMEWORKS
Egor Bogatov. Xamarin developer at Playtika.
Какие ваши преимущества?
•Testability
•Developer-designer workflow (blendability)
Is it popular?
Only for С#/XAML?
•WPF / Silverlight / WP8 / Windows Store / WinForms / iOS / Android / MAC
•JavaScript (Knockout, etc)•Java (ZK)
MVVM diagram
MVVM diagram - details
Typical MVVM Framework•BaseViewModel•ICommand implementations•Behaviors•ValueConverters•EventAggregator•IoC (ViewModelLocator)•Templates, snippets•“Donate” button
Popular MVVM Frameworks•MVVM Light•Caliburn.Micro•Simple MVVM•ReactiveUI•Catel•MvvmCross•…
MVVM Light
•BaseViewModel•RelayCommand•Messanger
Extra:•EventToCommand•SimpleIoc
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”
Caliburn.Micro
• MDD – Magic Driven Development
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)]" />
Caliburn.Micro: tombstone
public class MainPageModelStorage: StorageHandler<MainPageViewModel>{ public override void Configure() { Property(x => x.Name) .InAppSettings(); }}
Caliburn.Micro: navigation
navigationService.UriFor<Page2ViewModel>() .WithParam(x => x.Name, "Test") .Navigate();
MvvmCross
•Cross-platform•PCL ViewModels•Plugins
MvvmCross: navigation• %Name%ViewModel - %Name%View
• ShowViewModel<FooViewModel>(new {key = “foo”})) FooViewModel: public void Init(string key) { }
MvvmCross: tombstone•LoadStateBundle
•SaveStateBundle•bundle.Data[“Name”] = _name;•bundle.Data[“Id”] = _id;
MvvmCross: plugins•Accelerometer•Bookmarks•Color•DownloadCache•Email•File•Json•JsonLocalization•Location•Messenger•MethodBinding
•Network•PhoneCall•PictureChooser•Reflection•ResourceLoader•Share•SoundEffects•Sqlite•ThreadUtils•Visibility•WebBrowser
Text binding
Command binding