290 likes | 464 Views
Overview of WPF. Ivan Krivyakov Senior Managing Consultant SunGard Consulting Services E-mail: Ivan.Krivyakov@SunGard.com ivan@ikriv.com http://www.ikriv.com/demo/wpf/. Overview of WPF. What Is This Presentation About WPF for an experienced developer What makes WPF different?
E N D
Overview of WPF Ivan Krivyakov Senior Managing Consultant SunGard Consulting Services E-mail: Ivan.Krivyakov@SunGard.com ivan@ikriv.com http://www.ikriv.com/demo/wpf/
Overview of WPF What Is This Presentation About • WPF for an experienced developer • What makes WPF different? • Things to explore • Definitely not a tutorial
Overview of WPF Why Is WPF Important? • It’s a major technology from a big market player • It is gaining ground in replacing Windows Forms • Many clients start including WPF knowledge as a requirement for hire • Officially released in Nov 2006 and still popular – definitely not a hype bubble
Overview of WPF A Contrived Mixture Formula WPF = XAML + Data Binding + Styles
Overview of WPF XAML • XML-based object definition language • Defines objects and their properties • Similar to the language of Spring.Net • Primarily used to describe UI artifacts • Can describe almost any .NET type • Limited support of generics
Overview of WPF XAML Describing UI artifacts: <DockPanel LastChildFill="True"> <StackPanel Orientation="Vertical" DockPanel.Dock="Top"> <TextBlock Margin="2">Count:</TextBlock> <TextBox Margin="5" Text="{Binding Count}" /> <TextBlock Margin="2">Results:</TextBlock> </StackPanel> <ListBox Margin="5" ItemsSource="{Binding Results}" /> </DockPanel> Describing custom data classes: <my:NumericViewModel Count="5"> <my:NumericViewModel.Sequence> <my:SquareRoots /> </my:NumericViewModel.Sequence> </my:NumericViewModel>
Overview of WPF XAML • Many controls accept arbitrary content • E.g. a button may contain any combination of other controls, such as text, images, and even text boxes, etc. • Thus no need for special image button or Image property on a button class
Overview of WPF XAML • ImageButtonDemo sample
Overview of WPF Data Binding <TextBlock Text=“{Binding Names.Count}” /> <ListBox ItemsSource=“{Binding Names}” /> • By default binds to the DataContext object of the UI element • Can bind to properties of other UI elements, static instances, etc.
Overview of WPF Dependency Properties • CLR properties: get, set • WPF dependency properties: get, set, default value, change notification, validation, animation, etc. • Dependency properties are set via reflection-like API • WPF DependencyObject class has a map from property descriptors to property values • Most WPF classes derive (directly or indirectly) from DependencyObject
Overview of WPF Dependency Properties The Dependency property API is somewhat bulky: public class MyStateControl : ButtonBase { public MyStateControl() : base() { } public Boolean State { get { return (Boolean)this.GetValue(StateProperty); } set { this.SetValue(StateProperty, value); } } public static readonly DependencyProperty StateProperty = DependencyProperty.Register( "State", typeof(Boolean), typeof(MyStateControl), new PropertyMetadata(false)); }
Overview of WPF Dependency Properties • GetValue(), SetValue() can accept properties owned by other classes. These called “attached” properties • In XAML attached properties look like so: <DockPanel> <TextBlock DockPanel.Dock=“Top” /> </DockPanel> • “Dock” property is owned by the DockPanel class, but it is set on a TextBlock instance. This is somewhat similar to extension methods in C#
Overview of WPF Data Change Notification • Binding mechanism must know when things change • Dependency properties are set via WPF-controlled methods GetValue, SetValue
Overview of WPF Data Change Notification For regular properties must implement interface INotifyPropertyChanged{ event … PropertyChanged;}class MyClass : INotifyPropertyChanged{ string _data; string Data { get { return _data; } set { if (value == _data) return; _data = value; PropertyChanged(…”Data”…); } }}
Overview of WPF Data Binding • Binding source: regular property or dependency property • Binding target: dependency property • Animation target: dependency property
Overview of WPF Data Binding • NumericFunctions Sample
Overview of WPF Data Templates • Data templates replace owner draw items in item controls like list boxes • Rule of thumb: avoid “assembling” text for UI in code. Use data templates instead
Overview of WPF Data Templates • NumericFunctions sample revisited using data template
Overview of WPF Styles and Control Templates • Lookless controls: behavior is separated from appearance • Behavior: control class, appearance: control style • Clock control may have Time property, and can track current time • Styles can define colors, fonts, and even completely overhaul the appearance of the control
Overview of WPF Styles and Control Templates • ClockControl demo
Overview of WPF WPF Binaries • Main: shipped with .NET 3.0 and later • WPF toolkit: additional controls such as data grid, date picker control • “Prism”: composite application guidance for WPF
Overview of WPF Expression Blend • Writing XAML by hand, especially grid layouts, may be overwhelming • Visual Studio has limited editing capabilities • Expression Blend is a separate application for editing XAML documents • Pros and Cons
Overview of WPF MVVM vs MVP Model View Presenter Model WPF Binding Mechanism View ViewModel
Overview of WPF MVVM vs MVP • MVVM is a WPF version of MVP • View is pure XAML • ViewModel has data to display • ViewModel may be more detailed/redundant than business objects • ViewModel does not have a reference to the view
Overview of WPF MVVM vs MVP • All communication to the view is done via bindings • Bindings take on most of the work of the presenter • ViewModel is mostly about presentation data. If there is no complex business logic, model is not necessary
Overview of WPF MVVM and Commands • Out of the box WPF does not fully support MVVM • Exchanging data is easy, dealing with commands, focus, etc. is more difficult. Not having reference to the view causes problems • Default mechanism of routed commands is not compatible with MVVM, since commands are delivered to the view
Overview of WPF Summary • WPF is very flexible, it has almost mathematical beauty • New approach to UI programming: binding, attached properties, MVVM • A learning curve • Fair number of gotchas and bugs • Performance is a frequent concern • Demand for WPF is on the rise
Overview of WPF References • Book: “Programming WPF” by Chris Sells • WPF toolkit et al.: http://wpf.codeplex.com/ • Prism:http://compositewpf.codeplex.com/ • MVVM: http://msdn.microsoft.com/en-us/magazine/dd419663.asp