WPF Naviguer à travers les points de vue en utilisant le pattern MVVM

Je suis en train de construire mon premier WPF utilisant le pattern MVVM. Avec l'aide de cette communauté, j'ai réussi à créer mon Modèle, mon premier ViewModel et la vue. Maintenant, je veux ajouter un peu de complexité à l'application de la conception de la base de l'application de mise en page de l'interface. Mon idée est d'avoir au moins 2 enfants de vues et d'une vue principale et de les séparer sur plusieurs XAML:

  • Principal.XAML
  • Produits.XAML
  • Clients.XAML

Principal aura un menu et un espace pour charger les vues enfant (Produits et Clients). Maintenant, suivant le pattern MVVM toute la logique de navigation entre les points de vue devraient être écrire sur un ViewModel. Si mi idée est d'avoir 4 Viewmodel:

  • MainViewModel
  • ProductsViewModel
  • ClientsViewModel
  • NavigationViewModel

Donc NavigationViewModel doit contenir une collection de enfant viewmodel? et un viewmodel est ce que le droit?

Donc mes questions sont:

1) Comment puis-je charger des différents points de vue (Produits, Clients) sur l'écran Principal en utilisant le pattern MVVM?

2) Comment puis-je mettre en œuvre la navigation viewModel?

3) Comment puis-je contrôler le nombre max d'ouvrir ou active du point de vue?

4) Comment puis-je basculer entre les vues ouvertes?

J'ai fait beaucoup de recherche et de lecture, et ne pouvais pas trouver tout simple exemple de travail de MVVM de navigation avec WPF qui se charge de multiples points de vue à l'intérieur d'une vue principale. Beaucoup de ensuite:

1) Usage externe toolkit, que je ne veux pas utiliser maintenant.

2) Mettre tout le code pour la création de tous les points de vue dans un seul fichier XAML, qui ne semble pas une bonne idée parce que j'ai besoin de mettre en œuvre de près de 80 points de vue!

Je suis dans le droit chemin, ici? Toute aide, surtout avec un peu de code sera appréciée.

Mise à JOUR

Donc, je créer un projet de test suivant @LordTakkera conseils, mais coincé. C'est ainsi que ma solution est:
WPF Naviguer à travers les points de vue en utilisant le pattern MVVM

J'ai créer:

  • Deux Modèles (Clients et Produits)

  • Une MainWindow et deux wpf contrôles utilisateur(Clients et Produits) XAML.

  • Trois Viewmodel (des Clients, des Produits et des Principaux ViewModel)

Puis j'ai mis dataContext sur chaque point de vue correspondant à l'viewModel. Après cela, j'ai créer MainWindow avec le ContentPresenter comme ça et de le lier à une propriété du viewmodel.

MainWindow.XAML

<Window x:Class="PruevaMVVMNavNew.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="519" Width="890">    
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="150"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="80"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="20"/>
    </Grid.RowDefinitions>        
    <Border Grid.Column="0" Grid.ColumnSpan="2" Background="AntiqueWhite" ></Border>
    <Border Grid.Row="1" Grid.RowSpan="2" Background="AliceBlue"></Border>
    <Border Grid.Row="1" Grid.Column="1" Background="CadetBlue"></Border>                
    <ContentPresenter Grid.Row="1" Grid.Column="1" x:Name="ContentArea" Content="{Binding CurrentView}"/>        
    <StackPanel Margin="5" Grid.Column="0" Grid.Row="1">            
        <Button>Clients</Button>
        <Button>Products</Button>
    </StackPanel>
</Grid>

Et aussi c'est viewmodel de MainWindow:

class Main_ViewModel : BaseViewModel
    {
        public Main_ViewModel()
        {
            CurrentView = new Clients();
        }

        private UserControl _currentView;
        public UserControl CurrentView
        {
            get
            {
                return _currentView;
            }
            set
            {
                if (value != _currentView)
                {
                    _currentView = value;
                    OnPropertyChanged("CurrentView");
                }
            }
        }

    }

Donc cette charge, par défaut, les clients de la vue et ressemble à ceci (qui est juste à droite!):

WPF Naviguer à travers les points de vue en utilisant le pattern MVVM

Donc je suppose que j'ai besoin d'un moyen de relier les boutons sur la gauche, avec un certain viemodel et puis les lier avec Lors de Propriété du viewModel Principal. Comment puis-je le faire?

UPDATE2

Selon @LordTakkera conseils je modifier mon viewModel principal de cette manière:

class Main_ViewModel : BaseViewModel
    {
        public ICommand SwitchViewsCommand { get; private set; }

        public Main_ViewModel()
        {
            //CurrentView = new Clients();
            SwitchViewsCommand = new RelayCommand((parameter) => CurrentView = (UserControl)Activator.CreateInstance(parameter as Type));
        }

        private UserControl _currentView;
        public UserControl CurrentView
        {
            get
            {
                return _currentView;
            }
            set
            {
                if (value != _currentView)
                {
                    _currentView = value;
                    OnPropertyChanged("CurrentView");
                }
            }
        }
    }

- Je utiliser RelayCommand au lieu de DelegateCommand mais je pense qu'il fonctionne de la même manière. La commande est exécutée, quand j'appuie sur les boutons et le paramètre de type chaîne de son ok mais j'ai cette erreur:

WPF Naviguer à travers les points de vue en utilisant le pattern MVVM

Traduction: Valeur ne peut pas être null. Nom du paramètre: type. Suggestion d'utilisation mot clé New pour créer un objet instance de
Je ne sais pas où mettre le mot clé New. J'ai essayer sur CommandParameter mais il l'habitude de travailler. Une idée? Grâce

Mise à JOUR 3

Après tous les conseils et l'aide reçue ici, et beaucoup de travail, voici mon dernier menu de navigation et la base pour mon interface de l'application.

WPF Naviguer à travers les points de vue en utilisant le pattern MVVM
WPF Naviguer à travers les points de vue en utilisant le pattern MVVM

  • Application Agréable, Eric.J'ai à nouveau pour wpf.J'ai du mal à concevoir l'application avec la même mise en page.Pourriez-vous pls envoyer le code.Il serait très utile d'obtenir plus de connaissances.
InformationsquelleAutor ericpap | 2014-04-01