Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Data Bind Everything
Search
Stuart Lodge
December 04, 2013
Technology
5.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Data Bind Everything
Talk given at NDC London December 4th 2013
Stuart Lodge
December 04, 2013
More Decks by Stuart Lodge
See All by Stuart Lodge
Future Decoded - VisualStudio and Xamarin talk
cirrious
0
250
MvvmCross - Presentation to BCS Edinburgh
cirrious
0
220
MobDevCon MvvmCross Workshop
cirrious
0
3.8k
Static Version of MvvmCross Evolve talk
cirrious
0
180
Jago?
cirrious
0
230
Presenters in MvvmCross
cirrious
1
33k
Saying SOLID with PCL
cirrious
0
3.9k
Using SQLite.Net In MvvmCross
cirrious
0
1.2k
AppStart in MvvmCross
cirrious
2
3.1k
Other Decks in Technology
See All in Technology
演劇と私とスクラム
chinmo
0
110
日本AIベンチャーレポート2026
kentarofujii
0
230
AI時代のGraphQL
joere
3
400
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
310
撮るだけでは終わらない。ソニーが挑むB2Bカメラソリューション開発
sony
0
110
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
0
270
BacklogのRAG 今ならこう作る - S3 Vectorsと自前パイプラインの勘所
revsystem
0
130
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
1
340
フィンテック養成勉強会#68
finengine
0
240
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
110
トークン化預金DCJPYの取り組みと活用ユースケース
finengine
0
250
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
290
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
A Modern Web Designer's Workflow
chriscoyier
699
190k
Tell your own story through comics
letsgokoyo
1
1.1k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Facilitating Awesome Meetings
lara
57
7.2k
Between Models and Reality
mayunak
4
500
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Designing for Performance
lara
612
70k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
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