• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
MVVM+MEF in Silvelight - W 2010ebday
 

MVVM+MEF in Silvelight - W 2010ebday

on

  • 3,938 views

MVVM+MEF session for Microsoft WebDay 2010 in Oporto....

MVVM+MEF session for Microsoft WebDay 2010 in Oporto.
http://www.mswebday.com/

An overview on the MVVM (Model View ViewModel) pattern and MEF (Managed Extensibility Framework) in Silverlight. When and how to use them.

Statistics

Views

Total Views
3,938
Views on SlideShare
3,875
Embed Views
63

Actions

Likes
0
Downloads
121
Comments
0

4 Embeds 63

http://napoleonss.wordpress.com 32
http://www.slideshare.net 23
http://www.linkedin.com 5
http://static.slidesharecdn.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    MVVM+MEF in Silvelight - W 2010ebday MVVM+MEF in Silvelight - W 2010ebday Presentation Transcript

    • MVVM + MEF in Silverlight
      Ricardo Fiel
    • Who’s that guy?
      xamlpt.com/blogs/rfiel/
      pontonetpt.com/blogs/rfiel/
      blogs.fullsix.pt
      labs.fullsix.pt
      Ricardo Fiel
      Senior Engineer
      Fullsix Portugal
      ricardo.fiel@fullsix.com
      @theplastictoy
    • Agenda
      The “easy” way
      MVVM – Model View ViewModel
      MEF – Managed Extensibility Framework
      Scenarios for MVVM + MEF together
      Q&A
    • The “easy” way
    • Question
      What are some of the biggest costs in Software Development?
      • Maintenance
      • Bug fixing
      • ?
    • demo
      Building a Silverlight app the “easy” way
    • That was the DANGEROUS way!
      Too much coupling
      Very hard to test
      Developer-Designer workflow issues
      Maintenance will be a pain
      Looks faster, but will become expensive
      It’s not always the wrong way, but
      USE IT WITH CAUTION!
    • MV* patterns
      Different people reading about MVC in different places take different ideas from it and describe these as “MVC”.
      Presentation Model is of a fully self-contained class that represents all the data and behavior of the UI, but without any of the controls used to render that UI on the screen. A view then simply projects the state of the presentation model onto the glass.
      The most annoying part of Presentation Model is the synchronization between Presentation Model and view…
      Ideally some kind of framework could handle this, which I'm hoping will happen some day with technologies like .NET's data binding.
      Martin Fowler, 2004
    • MVVMModel-View-ViewModel
      Ladies and gentleman, may I introduce you to:
    • The MVVM triad
      View
      Display data in Controls
      UI Friendly Entities, UI State, Actions
      Entities representing data
      ViewModel
      Model
    • Model
      Represents the data
      The entity
      Not required to know where it gets its data from
      From a WCF service. WCF RIA Services, etc
      May contain validation
    • View
      The screen, the UI, the UserControl in Silverlight
      Handles UI look and feel
      Presentation of information
      Communicates with ViewModel through bindings
    • ViewModel
      Main source of logic for the MVVM triad
      Connects the Model to the View
      Abstracts the View
      Public properties that are bound to a View
      INotifyPropertyChangedand INotifyCollectionChangedtalk to the View through bindings
      Listens for changes from the View through bindings
      May invoke services to communicate outside the MVVM triad
    • MVVM Variations - 1
      View First
      ViewModel is created as a StaticResource in the View’s XAML or in the View’s code-behind
      Excellent for Blend (“Blendability”)
      <UserControl.Resources>
      <data:GamesViewModel x:Key="TheViewModel" />
      </UserControl.Resources>
      <Grid DataContext="{Binding Path=Games,
      Source={StaticResourceTheViewModel}}">
      ...
      </Grid>
    • MVVM Variations - 2
      ViewModel first
      View is injected into the ViewModel’sconstructor
      Example:
      ViewModel is created then the View is created using Dependency Injection
      public MyViewModel
      {
      public MyViewModel(IMyView view)
      {
      }
      }
    • MVVM Variations - 3
      ViewModel and View are created through an intermediary, then paired together
      vm = new MyVM();
      view = new MyView();
      view.DataContext = vm;
      // With Unity
      vm = container.Resolve<IMyVM>();
      view = container.Resolve<MyView>();
      view.DataContext = vm;
    • From Now On We’re Using ViewFirst
      <3
    • Don’t look up!
      View only knows ViewModel
      ViewModel only knows Model
      The Model stands alone
    • ICommand interface
      Available in Silverlight 4
      ButtonBase and Hyperlink now have Command and CommandParameter properties
      <Button Content="Load Products" Width="120"
      Command="{Binding FindMatchingProducts}"
      CommandParameter="{Binding Path=Text, ElementName=CostThresholdFilter}"/>
      public interface ICommand
      {
      boolCanExecute(Object parameter);
      void Execute(Object parameter);
      event EventHandlerCanExecuteChanged;
      )
    • Tools to make it simple
      There are several tools available:
      Prism
      www.codeplex.com/CompositeWPF
      Caliburn
      www.codeplex.com/caliburn
      Silverlight.FX
      projects.nikhilk.net/SilverlightFX
      MVVM Light Toolkit
      www.codeplex.com/mvvmlight
      You can build your own MVVM framework
      Comparison list at http://www.japf.fr/silverlight/mvvm/index.html
    • demo
      ViewFirst MVVM
    • MEFManaged Extensibility Framework
    • MEF Intro
      Library for building extensible applications
      Part of Silverlight 4
      Silverlight 3 support
      mef.codeplex.com
      Prism support
      mefcontrib.codeplex.com
      Open source
    • MEF Basics
      An application is built of Parts
    • The MEF “Motto”
      Exportit.
      Import it.
      Composeit.
    • Export it
      [Export(typeof(UserControl))]
      public class Widget1 : UserControl
      {
      public string Message {
      get{return(string) Button.Content;}
      set{Button.Content=value;}
      }
      }
      Widget1
      UserControl
      Export
    • Import it
      [Export(typeof(UserControl))]
      public class MainPage: UserControl
      {
      [ImportMany(typeof(UserControl))]
      public IEnumerable<UserControl> {
      get;set;
      }
      }
      Main
      Page
      UserControl
      ImportMany
    • Compose it
      PartIntializer: “Compose yourself”
      public MainPage()
      {
      InitializeComponent();
      PartInitializer.SatisfyImports(this);
      }
      MainPage
      Compose
    • demo
      Adding social widgets
    • Scenarios MVVM + MEF together?
      I, MVVM, take you MEF, to be my wife, to have and to hold from this day forward, for better or for worse, for richer, for poorer, in sickness and in health, to love and to cherish; from this day forward until death do us part.
    • Thanks!
      xamlpt.com/blogs/rfiel/
      pontonetpt.com/blogs/rfiel/
      blogs.fullsix.pt
      labs.fullsix.pt
      Ricardo Fiel
      Senior Engineer
      Fullsix Portugal
      ricardo.fiel@fullsix.com
      @theplastictoy
      Please keep in touch!