Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 avril 2014 3 02 /04 /avril /2014 17:50

 

 
MainWindow

 

   <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.50*" />
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
 
            <Button Command="{Binding DisplayArticleListViewCommand}" Content="Liste d'articles" Grid.Row="0" Margin="5 5 5 5" />
            <Button Command="{Binding DisplayArticleViewCommand}" Content="Détails"  Grid.Row="1" Margin="5 5 5 5"/>
        </Grid>
 
           <ContentPresenter Content="{Binding CurrentViewModel}"  Grid.Column="1"/>
    </Grid>

 
MainWiewModel

  public class MainViewModel : ViewModelBase
    {
        // ViewModels affichables
        public ArticleListViewModel ArticleListViewModel { get; set; }
        public ArticleViewModel ArticleViewModel { get; set; }
        private ViewModelBase _currentViewModel;
        // ViewModel courant
        public ViewModelBase CurrentViewModel
        {
            get { return _currentViewModel; }
            set
            {
                _currentViewModel = value;
                RaisePropertyChanged<ViewModelBase>(() => CurrentViewModel);
            }
        }
        // Commandes
        public RelayCommand<MainViewModel> DisplayArticleListViewCommand { get; set; }
        public RelayCommand<MainViewModel> DisplayArticleViewCommand { get; set; }
 
        public MainViewModel() { }
        protected override void InitializeCommands()
        {
            DisplayArticleListViewCommand = new RelayCommand<MainViewModel>(_ => DisplayArticleListView(), this);
            DisplayArticleViewCommand = new RelayCommand<MainViewModel>(_ => DisplayArticleView(), this);
        }
 
        private void DisplayArticleListView()
        {
            if (ArticleListViewModel == null)
                ArticleListViewModel = new ArticleListViewModel();
 
            CurrentViewModel = ArticleListViewModel;
        }
 
        private void DisplayArticleView()
        {
            if (ArticleViewModel == null)
                ArticleViewModel = new ArticleViewModel();
 
            CurrentViewModel = ArticleViewModel;
        }    
    }

 

En ressource (permet de définir la View associée à un ViewModel) 
        <DataTemplate DataType="{x:Type ViewModel:ArticleListViewModel}">
            <View:ArticleListView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type ViewModel:ArticleViewModel}">
            <View:ArticleView />
        </DataTemplate>

 

Le code des ViewModels et Views est classique et présente peu d’intérêt .
A savoir que l’on définit le DataContext de MainWidow sur nouveau MainViewModel
Plus loin
Il est possible aussi de définir une ObservableCollection<ViewModelBase> ou créer une classe spécifique qui hérite de ViewModelBase et utiliser un control comme le TabControl

Partager cet article

Repost 0
Published by Romagny13 - dans MVVM
commenter cet article

commentaires