Top Banner
John Daintree Data Binding Reloaded
34

John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Jan 03, 2016

Download

Documents

Nathan Cook
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

John Daintree

Data Binding Reloaded

Page 2: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Data Binding (2013)Data Binding Reloaded (2014)

Data Binding Revolutions (2015)

The Databinding Trilogy

Page 3: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 3

CENSORED

Page 4: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 4

COPYRIGHTED

Page 5: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 5

Turns out I can't even do a "Matrix" gag at an APL User Meeting.

No, hold on, sorry, Conference.Ah, no. As you were, I was right the first time. User Meeting. Yeah, that's

it.

Page 6: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

What is Data Binding?

• A software design pattern that allows the separation of Business Logic from User Interface

• "Separate the Data from the UI"• Used throughout Windows

Presentation Foundation (WPF)

Page 7: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

⎕USING←,⊂'System.Windows.Controls,WPF/PresentationFramework.dll'⎕USING,←⊂'System.Windows,WPF/PresentationFramework.dll'f←⎕NEW Window ⋄ f.SizeToContent←f.SizeToContent.WidthAndHeightsp←⎕NEW StackPanelwp←⎕NEW WrapPanelfilter←⎕NEW TextBox ⋄ filter.Margin←⎕NEW Thickness 5all←⎕NEW ListBox ⋄ all.Margin←⎕NEW Thickness 5filtered←⎕NEW ListBox ⋄ filtered.Margin←⎕NEW Thickness 5filter.Width←280 ⋄ all.Width←135 ⋄ filtered.Width←135(all filtered).Height←340{}wp.Children.Add¨all filtered{}sp.Children.Add¨filter wpf.Content←sp ⋄ f.Show

WPF in code

Page 8: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

XAML

Extensible Application Markup Language

Page 9: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight"> <StackPanel> <TextBox Name="filter" Margin="5"/> <WrapPanel> <ListBox Name="all" Width="135" Height="340" Margin="5"/> <ListBox Name="filtered" Width="135" Height="340" Margin="5"/> </WrapPanel> </StackPanel></Window>

WPF in XAML

{XamlReader.Load NEW XmlTextReader( NEW StringReader( )}⎕ ⎕ ⊂⍵

Page 10: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight"> <StackPanel> <TextBox Name="filter" Margin="5"/> <WrapPanel> <ListBox Name="all" Width="135" Height="340" Margin="5"/> <ListBox Name="filtered" Width="135" Height="340" Margin="5"/> </WrapPanel> </StackPanel></Window>

WPF in XAML

<StackPanel>

<WrapPanel>

Page 11: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

<Torso x:Name="myBody"><Lung Alignment="Left"/><Lung Alignment="Right"/><Heart Blood="{Binding myBlood,

Mode=TwoWay}"/><Stomach Full="True"/>

<Abs SixPack="False"/> </Torso>

More WPF / XAML

Page 12: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

<Torso x:Name="myBody"><Lung Alignment="Left"/><Lung Alignment="Right"/><Heart Blood="{Binding myBlood, Mode=TwoWay}"/><Stomach Full="True"/>

<Abs SixPack="True"/></Torso>

More WPF / XAML

Page 13: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Anatomy of a bind

"Text" Property

A workspace

char array

nested array"ItemsSource" Property

Source

Source

Binding

namespaceSource

Binding

Binding

Binding

"ItemsSource" Property

Page 14: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

"Text" Property

A workspace

char array

nested array"ItemsSource" Property

Source

Source

Binding

namespaceSource

Binding

Binding

Binding

"ItemsSource" Property

2015 (or APL, or XAML)⌶APL (or XAML)

Page 15: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

"Text" Property char array

nested array"ItemsSource" Property

namespace

"ItemsSource" Property

A workspace

Page 16: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

"Text" Property

"ItemsSource" Property

namespace

"ItemsSource" Property

A workspace

Page 17: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 18

DyalogNames←'John Daintree' 'Morten Kromberg' 'et al' win← NEW Window ⋄ win.Topmost←1⎕ win.(Top Left Width)←50 500 500 win.lb← NEW ListBox⎕ win.Content←win.lb win.lb.ItemsSource←2015 'DyalogNames'⌶ win.Show

Page 18: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 19

DyalogNames←'John Daintree' 'Morten Kromberg' 'et al' win← NEW Window ⋄ win.Topmost←1⎕ win.(Top Left Width)←50 500 500 win.lb← NEW ListBox⎕ win.Content←win.lb win.lb.ItemsSource←2015 'DyalogNames'⌶ win.Show

Page 19: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 20

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 20: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 21

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 21: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 22

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 22: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 23

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 23: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 24

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 24: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 25

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 25: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 26

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 26: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 27

MySource← NS''⎕ MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames

win.DataContext←src ← 2015 'MySource'⌶

binding← NEW Data.Binding(⊂'FilteredList')⎕ win.filtered.SetBinding ListBox.ItemsSourceProperty binding binding← NEW Data.Binding(⊂'DyalogNames')⎕ win.all.SetBinding ListBox.ItemsSourceProperty binding

binding← NEW Data.Binding(⊂'Filter')⎕ binding.Mode←Data.BindingMode.TwoWay binding.UpdateSourceTrigger←Data.UpdateSourceTrigger.PropertyChanged win.filter.SetBinding TextBox.TextProperty binding

src.onElementChanged←'element_changed'

Page 27: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 28

MySource← NS''⎕

MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames src←2015 'MySource'⌶ src.onElementChanged←'element_changed'

win←ReadXaml InputWithBindingXaml win.Show win.DataContext←src

Page 28: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 29

MySource← NS''⎕

MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames src←2015 'MySource'⌶ src.onElementChanged←'element_changed'

win←ReadXaml InputWithBindingXaml win.Show win.DataContext←src

Page 29: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 30

MySource← NS''⎕

MySource.Filter←'' MySource.FilteredList←0⍴⊂'' MySource.DyalogNames←DyalogNames src←2015 'MySource'⌶ src.onElementChanged←'element_changed'

win←ReadXaml InputWithBindingXaml win.Show win.DataContext←src

Page 30: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 31

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight" Topmost="true"> <StackPanel> <TextBox Name="filter" Margin="5" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <WrapPanel> <ListBox Name="all" Width="135" Height="440" Margin="5" ItemsSource="{Binding DyalogNames}"/> <ListBox Name="filtered" Width="135" Height="440" Margin="5" ItemsSource="{Binding FilteredList}"/> </WrapPanel> <TextBlock Text="Dyalog WPF Demo" Margin="5"/> </StackPanel> </Window>

Page 31: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 32

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight" Topmost="true"> <StackPanel> <TextBox Name="filter" Margin="5" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <WrapPanel> <ListBox Name="all" Width="135" Height="440" Margin="5" ItemsSource="{Binding DyalogNames}"/> <ListBox Name="filtered" Width="135" Height="440" Margin="5" ItemsSource="{Binding FilteredList}"/> </WrapPanel> <TextBlock Text="Dyalog WPF Demo" Margin="5"/> </StackPanel> </Window>

Page 32: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 33

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight" Topmost="true"> <StackPanel> <TextBox Name="filter" Margin="5" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <WrapPanel> <ListBox Name="all" Width="135" Height="440" Margin="5" ItemsSource="{Binding DyalogNames}"/> <ListBox Name="filtered" Width="135" Height="440" Margin="5" ItemsSource="{Binding FilteredList}"/> </WrapPanel> <TextBlock Text="Dyalog WPF Demo" Margin="5"/> </StackPanel> </Window>

Page 33: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Slide 34

Demo

Page 34: John Daintree Data Binding Reloaded. Data Binding (2013) Data Binding Reloaded (2014) Data Binding Revolutions (2015) The Databinding Trilogy.

Data Binding Revolutions (2015)

"Everything That Has a Beginning Has an End"

Coming to a conference centre near you in 2015

The Databinding Trilogy

©warnerbros.