xaml data binding in uwp

33
XAML Data Binding Let’s Dev This Montreal Christian Hissibini @histechup

Upload: christian-hissibini

Post on 14-Apr-2017

431 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: XAML Data Binding in UWP

XAML Data BindingLet’s Dev This Montreal

Christian Hissibini@histechup

Page 2: XAML Data Binding in UWP

Christian HissibiniTech Enthousiast…

@histechupHisTech SolutionsMicrosoft MVP Windows Platform Dev

Page 3: XAML Data Binding in UWP

AgendaData binding basicsCompiled binding

Page 4: XAML Data Binding in UWP

Data binding basics

Page 5: XAML Data Binding in UWP

Literal DataYou could hard code everything, but…

Not very dynamic.

Page 6: XAML Data Binding in UWP

Dynamic DataUse data binding to connect to a data sourceTypical data source would be a view model

Page 7: XAML Data Binding in UWP

Updating the UIINotifyPropertyChangedImplement in a view model classRaised by View Model when property value changes

INotifyCollectionChangedImplemented in ObservableCollection<T> and ReadOnlyObservableCollection<T>Raised by the collection when the collection is modified(also IObservableVector)

Page 8: XAML Data Binding in UWP

New for dependency properties register for property changes

Page 9: XAML Data Binding in UWP

Syntax<TextBox Text="{Binding

ConverterConverterLanguageConverterParameterElementNameFallbackValueModePathRelativeSourceSourceTargetNullValueUpdateSourceTrigger}

Page 10: XAML Data Binding in UWP

Converting DataConverters change data during bindingRaw datatype > Converter > Formatted string

IValueConverterConvert method

Converts data to a new format/value before assignmentConvertBack method

Converts data from the new format/value updating sourceOften not implemented

Page 11: XAML Data Binding in UWP

Demo: Classic binding

Page 12: XAML Data Binding in UWP

Compiled binding

Page 13: XAML Data Binding in UWP

What problem are we solving?

Page 14: XAML Data Binding in UWP

Classic Bindin

g

Compiled

Binding

Page 15: XAML Data Binding in UWP

x:BindCompiled bindingBindings are committed at compile-time

Strongly-typed bindingDuck binding is not supported

Default mode is OneTimeOneWay and TwoWay are still available

Standard binding approachesINotifyPropertyChanged, IObservableVector, INotifyCollectionChanged

Page 16: XAML Data Binding in UWP

The data context of x:Bind is the code-behind class

Page 17: XAML Data Binding in UWP

Syntax<TextBox Text="{Binding

ConverterConverterLanguageConverterParameterElementNameFallbackValueModePathRelativeSourceSourceTargetNullValueUpdateSourceTrigger}

<TextBox Text="{x:BindConverterConverterLanguageConverterParameterElementNameFallbackValueModePathRelativeSourceSourceTargetNullValueUpdateSourceTrigger}

Page 18: XAML Data Binding in UWP

Data Templates<ListView ItemsSource="{x:Bind ViewModel.Employees}">

<ListView.ItemTemplate>

<DataTemplate x:DataType="model:Employee">

<Grid>

<TextBlock Text="{x:Bind Name}"/>

</Grid>

</DataTemplate>

</ListView.ItemTemplate>

</ListView>

Page 19: XAML Data Binding in UWP

Demo: Compiled binding

Page 20: XAML Data Binding in UWP

Improve performance by simplifying your templates

Page 21: XAML Data Binding in UWP

Resource dictionaries<ResourceDictionary

x:Class="MyNamespace.MyTemplates"

xmlns:model="using:xBindSampleModel">

<DataTemplate

x:Key="MyTemplate"

x:DataType="model:Employee">

<TextBlock Text="{x:Bind Name}" />

</DataTemplate>

</ResourceDictionary>

namespace MyNamespace{ public class MyTemplates { public MyTemplates() { InitializeComponent(); } }}

Page 22: XAML Data Binding in UWP

Referencing a dictionary</UserControl.Resources>

<ResourceDictionary>

<ResourceDictionary.MergedDictionaries>

<local:MyTemplates/>

<ResourceDictionary Source="filename" />

</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

</UserControl.Resources>

Page 23: XAML Data Binding in UWP

Binding for Events<Button Click="PokeEmployee">Poke Employee</Button><Button Click="{x:Bind Employee.Poke}">Poke Employee</Button>

SignatureHave no parameters - void Poke()Match event parameters - void Poke(object sender, RoutedEventArgs e)Match event base types - void Poke(object sender, object e)Overloading is not supported

Because all events are eligible:This may replace ICommand & EventToCommandNote: this does not include parameter or CanExecute

Page 24: XAML Data Binding in UWP

Use Bindings.Update()for async data (incl. OneTime)

Page 25: XAML Data Binding in UWP

Bindings.StopTracking()pauses compiled bindings

Page 26: XAML Data Binding in UWP

How do I?RelativeSource = Self & ElementName

Reference elements by name in Text="{x:Bind MyElement.Text}"

RelativeSource = TemplatedParentCannot use x:Bind in control templates; TemplateBinding is already optimized

Source / DataContextAdd a ViewModel to your code-behind

Page 27: XAML Data Binding in UWP

Page.ViewModelpublic sealed partial class MainPage : Page{ public MainPage() { InitializeComponent(); this.DataContextChanged += (s, e) => { ViewModel = DataContext as ViewModels.MainPageViewModel; }; }

// strongly-typed view models enable x:bind public ViewModels.MainPageViewModel ViewModel { get; set; }}

Page 28: XAML Data Binding in UWP

{x:Bind} is not for every situation (yet)

Page 29: XAML Data Binding in UWP

When to use classic bindingDuck TypingText=“{Binding Age}” works for both PersonModel & WineModel

Dictionary graphsUse {Binding} with JSON or other untyped objects

Code-behind bindingCan add/remove {x:Bind} @ runtime

Use in a style{x:Bind} can’t be used in a style for setters{x:Bind} can be used in a DataTemplate that is defined in the style

Page 30: XAML Data Binding in UWP

x:Bind can meet your binding needs most of the time.

Page 31: XAML Data Binding in UWP

ReviewData binding basicsCompiled binding

Page 32: XAML Data Binding in UWP

Questions?

Page 33: XAML Data Binding in UWP

Thank you!