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 :

Binding de la propriété ItemsSource d'un DataGridComboBoxColumn


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Par défaut Binding de la propriété ItemsSource d'un DataGridComboBoxColumn
    Bonjour à tous,

    Cela fait un petit moment que je cherche pourquoi je n'arrive pas à binder la propriété ItemsSource de mon DataGridComboBoxColumn, sans trouver de solution à mon problème.

    Le code de ma fenêtre wpf :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <Window x:Class="TestMVVM.View.FichePiloteView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:View="clr-namespace:TestMVVM.View"
            Name="fichePiloteView"
            Title="FichePiloteView"
            Height="300" Width="737">
        <DockPanel>
            <Grid DockPanel.Dock="Left" Width="226">
                <Label Content="Nom" Height="28" HorizontalAlignment="Left" Margin="12,22,0,0" Name="label1" VerticalAlignment="Top" />
                <Label Content="Prénom" Height="28" HorizontalAlignment="Left" Margin="12,56,0,0" Name="label2" VerticalAlignment="Top" />
                <Label Content="Club" Height="28" HorizontalAlignment="Left" Margin="12,90,0,0" Name="label3" VerticalAlignment="Top" />
                <TextBox Height="23" HorizontalAlignment="Left" Margin="81,24,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Pilote.Nom}" />
                <TextBox Height="23" HorizontalAlignment="Left" Margin="81,58,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" Text="{Binding Pilote.Prenom}" />
                <ComboBox Height="23" HorizontalAlignment="Left" Margin="81,90,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding ListeClubs}" SelectedItem="{Binding Pilote.Club}" />
            </Grid>
            <Grid DockPanel.Dock="Right">
                <Grid.RowDefinitions>
                    <RowDefinition Height="24*" />
                    <RowDefinition Height="237*" />
                </Grid.RowDefinitions>
                <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" Name="dataGrid1" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Path=Pilote.PiloteCategories}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="N° machine" Binding="{Binding NumeroMachine}" />
                        <!-- C'est ici que j'ai un problème -->
                        <DataGridComboBoxColumn Header="Catégorie" ItemsSource="{Binding ElementName=fichePiloteView, Path=DataContext.ListeCategories}" SelectedItemBinding="{Binding Categorie.Nom}" />
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
        </DockPanel>
    </Window>

    la fenêtre est créée de la manière suivante :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var fichePilote = new FichePiloteView();
    fichePilote.DataContext = new FichePiloteViewModel(pilote);
    fichePilote.ShowDialog();

    Les propriétés de la classe FichePiloteViewModel sont les suivantes :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    class FichePiloteViewModel
    {
        [...]
        private readonly IEnumerable<ClubViewModel> listeClubs;
        private readonly IEnumerable<Categorie> listeCategories;
        private Pilote modifiedPilote;
     
        /// <summary>
        /// Obtenir la liste des clubs.
        /// </summary>
        public IEnumerable<ClubViewModel> ListeClubs
        {
            get
            {
                return listeClubs;
            }
        }
     
        /// <summary>
        /// Obtenir la liste des catégories.
        /// </summary>
        public IEnumerable<Categorie> ListeCategories
        {
            get
            {
                return listeCategories;
            }
        }
     
        /// <summary>
        /// Obtenir le pilote en cours de modification.
        /// </summary>
        public Pilote Pilote
        {
            get
            {
                return modifiedPilote;
            }
        }
     
        [...]
    }

    J'obtiens l'erreur suivante :

    System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpressionath=DataContext.ListeCategories; DataItem=null; target element is 'DataGridComboBoxColumn' (HashCode=17600675); target property is 'ItemsSource' (type 'IEnumerable')
    J'espère avoir été suffisamment clair.
    Merci d'avance pour vos réponses.

    EDIT :

    J'ai réussis à résoudre mon problème de la manière suivante :

    j'ai remplacé la portion de code :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <DataGridComboBoxColumn Header="Catégorie" ItemsSource="{Binding ElementName=fichePiloteView, Path=DataContext.ListeCategories}" SelectedItemBinding="{Binding Categorie.Nom}" />

    par :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <DataGridTemplateColumn Header="Catégorie">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Categorie.Nom}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.ListeCategories}" SelectedItem="{Binding Categorie}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>

    A noter que la solution suivante ne fonctionne pas :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <DataGridComboBoxColumn Header="Catégorie" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.ListeCategories}" SelectedItemBinding="{Binding Categorie}" />
    Si quelqu'un à une explication je suis preneur.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Par défaut
    2h que je cherche le pb de mon binding d'ItemsSource et je finis par faire mon propre template un peu comme toi : ça fonctionne en 5 secondes.

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

Discussions similaires

  1. binding sur une propriété shared (vb) static (c#) ?
    Par Pol63 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/06/2009, 15h44
  2. [webflow] binding d'une propriétés de collection
    Par kaljerhom dans le forum Spring Web
    Réponses: 1
    Dernier message: 12/05/2009, 10h08
  3. Binding sur une propriété avec paramètre
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/11/2008, 18h38
  4. [Binding] comboviewer et propriété objet.
    Par Morbo dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 05/11/2008, 15h07
  5. [Databinding] bind sur une propriété d'une collection
    Par herveb dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/12/2007, 10h35

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