Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Data Bind Everything
Search
Stuart Lodge
December 04, 2013
Technology
0
4.6k
Data Bind Everything
Talk given at NDC London December 4th 2013
Stuart Lodge
December 04, 2013
Tweet
Share
More Decks by Stuart Lodge
See All by Stuart Lodge
Future Decoded - VisualStudio and Xamarin talk
cirrious
0
190
MvvmCross - Presentation to BCS Edinburgh
cirrious
0
160
MobDevCon MvvmCross Workshop
cirrious
0
3.2k
Static Version of MvvmCross Evolve talk
cirrious
0
100
Jago?
cirrious
0
130
Presenters in MvvmCross
cirrious
1
31k
Saying SOLID with PCL
cirrious
0
3.3k
Using SQLite.Net In MvvmCross
cirrious
0
1.1k
AppStart in MvvmCross
cirrious
2
2.9k
Other Decks in Technology
See All in Technology
Além do else! Categorizando Pokemóns com Pattern Matching no JavaScript
wmsbill
0
630
Kernel MemoryでAzure OpenAI Serviceとお手軽データソース連携
mitsuzono
1
260
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
360
競技としてのKaggle、役に立つKaggle
yu4u
3
1.7k
ChatworkのSRE部って実は 半分くらいPlatform Engineering部かもしれない
saramune
0
160
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
kenichirokimura
1
530
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
230
ServiceNow Knowledge Learning Rise up
manarobot
0
210
Postman v10リリース後を振り返る / Looking back at Postman v10 after release
yokawasa
1
160
長期間TiDBを使ってきた話 @ 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT / Experiences with TiDB Over Time
chibiegg
2
900
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
160
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
Featured
See All Featured
The Invisible Side of Design
smashingmag
294
49k
Clear Off the Table
cherdarchuk
84
310k
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
Design by the Numbers
sachag
274
18k
Music & Morning Musume
bryan
41
5.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
125
32k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
42k
We Have a Design System, Now What?
morganepeng
43
6.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
355
18k
GraphQLとの向き合い方2022年版
quramy
32
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
Transcript
@slodge Data-Bind Everything…
@slodge fun we’ve had extending data-binding in MvvmCross
@slodge MvvmCross
@slodge MvvmCross • C# • Microsoft, Xamarin and beyond! •
PCL • IoC • Convention-Based Mvvm • Data-Binding
@slodge MvvmCross • C# • Microsoft, Xamarin and beyond! •
PCL • IoC • Convention-Based Mvvm • Data-Binding
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge Data-Binding in Xaml/C#
@slodge Data-Binding in Xaml/C# ViewModel INotifyPropertyChanged Control TextProperty DependencyProperty DependencyObject
Values BindingOperations FirstName C# Property PropertyChanged C# Event
@slodge … in Android and iOS UIKit? ViewModel INotifyPropertyChanged Control
TextProperty DependencyProperty DependencyObject Values BindingOperations FirstName C# Property PropertyChanged C# Event
@slodge … in Android and iOS UIKit? ViewModel INotifyPropertyChanged Control
TextProperty DependencyProperty DependencyObject Values BindingOperations FirstName C# Property PropertyChanged C# Event Text TextChanged OurBindingEngine
@slodge What’s a Binding Engine do 1. Initially copy values
ViewModel -> View 2. When ViewModel changes, update View 3. When View changes, update ViewModel 4. Don’t loop! 5. When the View disappears, dispose the bindings
@slodge Creating a Binding Engine…
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge … in Android and iOS UIKit? ViewModel INotifyPropertyChanged Control
TextProperty DependencyProperty DependencyObject Values BindingOperations FirstName C# Property PropertyChanged C# Event Text TextChanged MvxBindingEngine
@slodge Syntax – Xaml/C# Text=“ {Binding Customer.Gender, Converter={StaticResource FormalGreeting}, FallbackValue=‘Mr’}”
@slodge Syntax - Json { “Text”: { “Path”:”Customer.Gender”, “Converter”:”FormalGreeting”, “FallbackValue”:”Mr”
} }
@slodge Syntax – “Swiss” Text Customer.Gender, Converter=FormalGreeting, FallbackValue=’Mr’
@slodge Syntax - Fluent set.Bind(label) .For(t => t.Text) .To(vm =>
vm.Customer.Gender) .WithConversion(“FormalGreeting”) .WithFallback(“Mr”)
@slodge Binding Parts • Path • Mode • Converter •
ConverterParameter • FallbackValue
@slodge Path • Simple FirstName • Chained Customer.FirstName • Indexed
Customers[0].FirstName Customers[“Fred”].FirstName • Whole Object .
@slodge Mode • One Way • Two Way • One
Way To Source • One Time • … and Default
@slodge Converters
@slodge Converters • Basic Conversion • FallbackValue • UnsetValue •
DoNothing
@slodge Core Demos
@slodge Binding Targets • It just works TM • When
it doesn’t just work: – Inheritance – Intermediate – Custom Bindings
@slodge Inheritance Android.Views.View MyShapeView TheShape TheShapeChanged
@slodge Intermediate Map MapMarkerHelper ItemsSource
@slodge Custom binding Button “Favorite” CustomBinding OurBindingEngine
@slodge Composite Binding Sources • Collections • Commands • I18n
• Dialogs
@slodge Collections
@slodge Commands
@slodge Internationalisation
@slodge Dialogs View ViewModel Command fired Show confirmation “MessageBox” Yes/No
result
@slodge Dialogs
@slodge Composite Demos
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge JavaScript envy • ko.observable • ko.computedValue • functions
@slodge Tibet Binding extensions • MultiBinding • Literals • +
- concatenation • Function-like ValueConversion • Recursive evaluation • ValueCombiners (MultiValueConverters) • If, Format, &&, ||, <, >, ==, …
@slodge Syntax – “Tibet”
@slodge Syntax – “Tibet”
@slodge Syntax – “Tibet”
@slodge Rio Extensions • Fody integration • Field Binding •
Method Bindings • Extensible – interfaces and plugins
@slodge Fody
@slodge Fody
@slodge Field Binding
@slodge Method Binding
@slodge All available in Xaml too
@slodge Tibet & Rio
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge Benefits • Code sharing • Designer-friendly • Testability •
Coder friendly
@slodge Some gaps/differences? • RelativeSource • ElementName • Validation and
Trigger • Multi-Binding • ICommand
@slodge “Overkill” • For small throwaway apps…
@slodge The Call Stack
@slodge Performance everyone (at least, more or less experienced developer)
knows that reflection is performance's "evil".
@slodge "We should forget about small efficiencies, say about 97%
of the time: premature optimization is the root of all evil" Performance
@slodge Performance Analysis Simple UI test: – ViewModel: 10000 *
“Value = Value+1” – View: TextView bound “Text Value”
@slodge Performance Results Baseline 2116 OneWay 2378 INotifyChanged 2066 TwoWayBaseline
6216 TwoWay 7092
@slodge • Building a Data-Binding Engine • MvvmCross v1/v2 Data-Binding
• MvvmCross v3 - Rio and Tibet • The Dark Side?
@slodge Awesomeness
@slodge
@slodge Thanks for listening! https://github.com/mvvmcross https://github.com/reactiveUI https://github.com/MacawNL https://github.com/Fody @slodge @mvvmcross