Composite Applications with WPF and PRISM 4.0 Eyal Vardi CEO E4D Solutions LTD Microsoft MVP Visual C# blog:
About ConsultingMentoringProjects
Agenda How to build Composite application? ModularityModularity ProductivityProductivity ExtensibilityExtensibility SecuritySecurity CommunicationCommunication DeploymentDeployment Multi-LanguageMulti-Language
Outlook Sample
Shell & Region == Master Page Ribbon App Nav App’s BodyPane Status Bar
DEMO Shell & Region
View-Based Navigation _container.RegisterType ("ViewName"); _regionManager.RequestNavigate( "RegionName", new Uri( "ViewName", UriKind.Relative) ); _container.RegisterType ("ViewName"); _regionManager.RequestNavigate( "RegionName", new Uri( "ViewName", UriKind.Relative) ); public interface INavigationAware { void OnNavigatedTo(NavigationContext navigationContext); bool IsNavigationTarget(NavigationContext navigationContext); void OnNavigatedFrom(NavigationContext navigationContext); } public interface INavigationAware { void OnNavigatedTo(NavigationContext navigationContext); bool IsNavigationTarget(NavigationContext navigationContext); void OnNavigatedFrom(NavigationContext navigationContext); }
DEMO Navigation
Event Aggregator Publisher / Subscriber Publisher Publisher Subscriber Subscriber
DEMO Event Aggregator
Visual State Manager (VSM) Data States Communication States SecurityStatesSecurityStates
Visual State Manager (VSM) State Transition State Groups
DEMO Visual State Manager
State-Based Navigation <DataStateBehavior Binding="{Binding IsChecked, ElementName= ShowAsListButton}" TrueState="ShowAsList" FalseState="ShowAsIcons"/> <DataStateBehavior Binding="{Binding IsChecked, ElementName= ShowAsListButton}" TrueState="ShowAsList" FalseState="ShowAsIcons"/>
[TemplateVisualState(Name="Normal", GroupName="CommonStates")] [TemplateVisualState(Name="MouseOver", GroupName="CommonStates")] [TemplateVisualState(Name="Pressed", GroupName="CommonStates")] public class NumericUpDown : Control } { [TemplateVisualState(Name="Normal", GroupName="CommonStates")] [TemplateVisualState(Name="MouseOver", GroupName="CommonStates")] [TemplateVisualState(Name="Pressed", GroupName="CommonStates")] public class NumericUpDown : Control } { Initiating State Changes The authors is responsible for telling VisualStateManager when a visual state change should occur. private void GoToState(bool useTransitions) } if (isPressed) VisualStateManager.GoToState(this, "Pressed", useTransitions); else if (isMouseOver) VisualStateManager.GoToState(this, "MouseOver", useTransitions); else VisualStateManager.GoToState(this, "Normal“, useTransitions); { private void GoToState(bool useTransitions) } if (isPressed) VisualStateManager.GoToState(this, "Pressed", useTransitions); else if (isMouseOver) VisualStateManager.GoToState(this, "MouseOver", useTransitions); else VisualStateManager.GoToState(this, "Normal“, useTransitions); {
Behaviors & Actions are Everywhere ConditionalConditional MotionMotion DataData AnimationAnimation
XAMLAdd-onXAMLAdd-on Attached property Drag & Drop Behavior is a…
DEMO Behaviors & Actions
SHSH PP PP CommunicationWCF Event Aggregator Interfaces Communication Module
Summary Keep the client thin. Defined your visual state with VSM. Use Behaviors & Actions for RAD. Use the Prism for modularity.
QUESTIONS?
Eyal Vardi CEO E4D Solutions LTD Microsoft MVP Visual C# blog: