Overview of Windows Presentation Foundation (WPF)
290 likes | 313 Vues
Learn about the key features and benefits of WPF, including XAML, data binding, styles, and control templates. This presentation provides an overview for experienced developers.
Overview of Windows Presentation Foundation (WPF)
E N D
Presentation Transcript
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