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.9k
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
210
MvvmCross - Presentation to BCS Edinburgh
cirrious
0
180
MobDevCon MvvmCross Workshop
cirrious
0
3.4k
Static Version of MvvmCross Evolve talk
cirrious
0
130
Jago?
cirrious
0
170
Presenters in MvvmCross
cirrious
1
32k
Saying SOLID with PCL
cirrious
0
3.5k
Using SQLite.Net In MvvmCross
cirrious
0
1.1k
AppStart in MvvmCross
cirrious
2
3k
Other Decks in Technology
See All in Technology
実践! AIエージェント導入記
1mono2prod
0
130
[TechNight #90-1] 本当に使える?ZDMの新機能を実践検証してみた
oracle4engineer
PRO
3
140
新卒3年目の後悔〜機械学習モデルジョブの運用を頑張った話〜
kameitomohiro
0
370
AIのAIによるAIのための出力評価と改善
chocoyama
0
480
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
160
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
550
本当に使える?AutoUpgrade の新機能を実践検証してみた
oracle4engineer
PRO
1
120
BigQuery Remote FunctionでLooker Studioをインタラクティブ化
cuebic9bic
2
220
IIWレポートからみるID業界で話題のMCP
fujie
0
700
20250623 Findy Lunch LT Brown
3150
0
750
Clineを含めたAIエージェントを 大規模組織に導入し、投資対効果を考える / Introducing AI agents into your organization
i35_267
4
1.3k
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
800
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Thoughts on Productivity
jonyablonski
69
4.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
The World Runs on Bad Software
bkeepers
PRO
68
11k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Building an army of robots
kneath
306
45k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Done Done
chrislema
184
16k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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