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 :

Binder une liste [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut Binder une liste
    Bonjour, je suis actuellement en train de développer un programme qui demande à un utilisateur de se connecter (login/mot de passe). Lorsque les identifiants sont corrects, la fenêtre de login se ferme et une autre apparaît, contenant une ListBox. Je tente de la remplir lors d'un clic sur le bouton login, en vain.

    Voici la fonction qui est appelée lorsque l'utilisateur peut se connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void LoginAccess()
            {
                DataAccess.Users users = new DataAccess.Users();
                if (users.TestUser(Login, Password))
                {
                    View.ListView window = new View.ListView();
                    ViewModel.ListViewModel vm = new ListViewModel();
                    window.DataContext = vm;
                    vm.GetPersons();
                    window.Show();
                    CloseSignal = true;
                }
            }
    CloseSignal permet de fermer la fenêtre et fonctionne, la fonction est donc appelée. Une instance de la nouvelle vue et son modèle est appelée, puis la fenêtre est affichée, ce qui fonctionne. J'essaye d'appeler GetPersons() de ListViewModel, ce qui mène ici :
    Code : 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
    29
    30
    31
    32
    33
    34
    35
    36
    namespace WPF_MVVM.ViewModel
    {
        public class ListViewModel : INotifyPropertyChanged
        {
            private ObservableCollection<Person> _DataCollection;
            public event PropertyChangedEventHandler PropertyChanged;
     
            public ListViewModel()
            {
            }
     
            public void GetPersons()
            {
                ObservableCollection<Person> pers = new ObservableCollection<Person>();
                pers.Add(Person.CreatePerson("nom", "21", "prenom"));
                DataCollection = pers;
            }
     
            protected void OnPropertyChanged(string propertyName)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }
     
            public ObservableCollection<Person> DataCollection
            {
                get { return _DataCollection; }
                set
                {
                    _DataCollection = value;
                    OnPropertyChanged("DataCollection");
                }
            }
        }
    }
    J'ai essayé d'appliquer le binding à ListView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Window x:Class="WPF_MVVM.View.ListView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="ListView" Height="300" Width="300"
            xmlns:vm="clr-namespace:WPF_MVVM.ViewModel">
        <Window.Resources>
            <vm:ListViewModel x:Key="viewModel"/>
        </Window.Resources>
        <Grid>
            <ListBox HorizontalAlignment="Left" Height="100" Margin="96,84,0,0" VerticalAlignment="Top" Width="100" Name="lstData" DisplayMemberPath="PersonName" ItemsSource="{Binding Source={StaticResource viewModel}, Path=DataCollection}"/>
        </Grid>
    </Window>
    Person est un modèle banal contenant trois string et CreatePerson retourne un objet de type Person. Savez-vous où j'ai fait une erreur ?

    Merci de votre aide

  2. #2
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    En fait j'aurais pas du mettre laListViewModel en ressources de ma vue, alors que cette VM est déjà affectée au DataContext...

    Autrement dit, j'ai fait ça et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Window x:Class="WPF_MVVM.View.ListView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="ListView" Height="300" Width="300"
            xmlns:vm="clr-namespace:WPF_MVVM.ViewModel">
     
        <Grid>
            <ListBox HorizontalAlignment="Left" Height="100" Margin="96,84,0,0" VerticalAlignment="Top" Width="100" Name="lstData" DisplayMemberPath="PersonName" ItemsSource="{Binding Path=DataCollection}"/>
        </Grid>
    </Window>

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

Discussions similaires

  1. Binder une liste dans un Container
    Par marcusien dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 18/10/2011, 09h16
  2. Binder une List<T> sur un DataGridView
    Par olibara dans le forum C#
    Réponses: 8
    Dernier message: 04/09/2009, 10h18
  3. binder une combo sur une list ou une autre
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 12/02/2009, 12h01
  4. Binder une listview avec une list<>
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 14/10/2008, 08h48
  5. Réponses: 6
    Dernier message: 17/07/2006, 13h56

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