IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

WPF TabControl MVVM plusieurs types d'objets


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut WPF TabControl MVVM plusieurs types d'objets
    Bonjour,

    voilà j'ai 2 vues/vueModel qui affichent mes infos pour types d'objet :
    par exemple
    Mon objet "Client" (ClientView/ClientViewModel) qui affiche le nom du client et ses coordonnées...
    Mon objet (OperationView/OperationViewModel)"Operation" qui affiche le nom de l'opération, la date...

    Maintenant, j'aimerai avoir un TabControl où je peux afficher ma vue "Client" dans un onglet et ma vue "Opération" dans un autre...

    Comment dois je proceder ? j'ai ma Vue TabControl et un TabBarViewModel
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    class TabBarViewModel : ViewModelBase
        {
            private readonly ObservableCollection<ViewModelBase> _tabs;
            private readonly ICollectionView _collectionView;
     
            public TabBarViewModel()
            {
                this._tabs = new ObservableCollection<ViewModelBase>();
                this._collectionView = CollectionViewSource.GetDefaultView(this._tabs);
     
                this._collectionView.CurrentChanged += new EventHandler(_collectionView_CurrentChanged);
            }
     
            void _collectionView_CurrentChanged(object sender, EventArgs e)
            {
                RaisePropertyChanged("SelectedTab");
            }
     
            public ObservableCollection<ViewModelBase> Tabs
            {
                get { return this._tabs; }
            }
     
            public ViewModelBase SelectedTab
            {
                get { return this._collectionView.CurrentItem as ViewModelBase; }
            }

    et dans mon xaml je mets :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <TabControl DockPanel.Dock="Bottom" x:Name="tabbar" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True" >
     
            </TabControl>

    j'ai également un méthode "AddTab" qui m'ajoute un onglet : ce qui fonctionne tres bien (pour tester j'ai fait un this._tabs.add(new testViewModel()))

    Mais maintenant... pour mes 2 objets, je fais quoi ? je suis un peu coincé là... est ce faire une "TabViewModel" avec en attribut un "ViewModelBase" est une bonne idée ? (que j'initialiserai soit avec "ClientViewModel" soit avec "OperationViewModel").. mais après à l'affichage, comment faire pour afficher la bonne vue ?


    merci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    Re-Bonjour,

    alors j'ai analysé l'exemple http://msdn.microsoft.com/en-us/magazine/dd419663.aspx ce qui ressemble à ce que je veux faire...

    dans son exemple je vois qu'il utilise un tabControl :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        <TabControl 
          IsSynchronizedWithCurrentItem="True" 
          ItemsSource="{Binding}" 
          ItemTemplate="{StaticResource ClosableTabItemTemplate}"
          Margin="4"
          />

    et 2 templateData pour afficher ces données
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      <!-- 
      This template applies an AllCustomersView to an instance 
      of the AllCustomersViewModel class shown in the main window.
      -->
      <DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
        <vw:AllCustomersView />
      </DataTemplate>
     
      <!-- 
      This template applies a CustomerView to an instance  
      of the CustomerViewModel class shown in the main window.
      -->
      <DataTemplate DataType="{x:Type vm:CustomerViewModel}">
        <vw:CustomerView />
      </DataTemplate>

    Maintenant mon problème : à quelle moment est ce qu'il dit que ces 2 templateData sont associés au TabControl ? là je bloque...

    Et autre question, je vois qu'il met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding}"
    .. ne devrit il pas y avoir plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "ItemsSource="{Binding Workspaces}"
    dans le tabcontrol ?

    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sauvegarde de plusieurs instanciations d'un même type d'objet
    Par janyoura dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 27/05/2014, 12h14
  2. Réponses: 2
    Dernier message: 11/01/2012, 17h28
  3. [WPF] Comment gérer plusieur ObservableCollection ayant le même objet?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/06/2011, 19h18
  4. [Appli] Recherche d'un type d'objet précis pour interface
    Par superpatate dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/08/2005, 12h02
  5. Renvoyer un OUTPUT de plusieurs types
    Par omlip dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/08/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo