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

Silverlight Discussion :

[VB.NET][Silverlight]combo et binding dans une grid


Sujet :

Silverlight

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut [VB.NET][Silverlight]combo et binding dans une grid
    Bonjour,


    J'ai défini deux combo box, les deux étant bindé de la même manière(binder à une collection coté behind) cependant le combobox(typeclient) dans la datagrid, ne fonctionne pas, (il est vrai que le bind du datagrid se fait via code et donc apres le bind du combox hors datatgrid(combox1)).
    Je me demande donc si en fait c'est possible?
    Code xaml : 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
    <UserControl x:Class="IHMAdministration.Maintenance" x:Name="control1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="399"  d:DesignWidth="1500" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" xmlns:input="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input" BorderBrush="#FF960000" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" >
     
        <Grid x:Name="LayoutRoot" Background="red" Height="399" Width="1500">
     
            <data:DataGrid AutoGenerateColumns="False" Height="255" HorizontalAlignment="Left" Name="DataGrid1" VerticalAlignment="Top" Width="1000">
                <data:DataGrid.Columns>
                    <data:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="IdClient" IsReadOnly="False" Width="Auto" Binding="{Binding IDClient}" />
                    <data:DataGridTemplateColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="Type du client" IsReadOnly="False" Width="Auto">
                        <data:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Name="TypeClient" ItemsSource="{Binding ElementName=control1, Path=DataContext.MyListeTypeClient, BindsDirectlyToSource=False, Mode=TwoWay}" DisplayMemberPath="Libelle" />
                            </DataTemplate>
                        </data:DataGridTemplateColumn.CellTemplate>
                      </data:DataGridTemplateColumn>
     
                </data:DataGrid.Columns>
     
            </data:DataGrid>
     
            <TextBox Height="346" HorizontalAlignment="Left" Margin="1029,1,0,0" Name="TxtLicence" VerticalAlignment="Top" Width="440" Text="{Binding ElementName=DataGrid1,Path=SelectedItem.Licence, Mode=TwoWay}" TextWrapping="Wrap" />
            <Button Content="Sauvegarde" Height="23" HorizontalAlignment="Left" Margin="1328,364,0,0" Name="btnSave" VerticalAlignment="Top" Width="141" />
            <Button Content="ajouter" Height="25" HorizontalAlignment="Left" Margin="867,261,0,0" Name="BtnAdd" VerticalAlignment="Top" Width="133" />
            <Button Content="Supprimer" Height="25" HorizontalAlignment="Left" Margin="717,261,0,0" Name="BtnSuppr" VerticalAlignment="Top" Width="144"/>
            <ComboBox Height="23" HorizontalAlignment="Left" Margin="1074,136,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding ElementName=control1, Path=DataContext.MyListeTypeClient}" DisplayMemberPath="Libelle"/>
     
        </Grid>
    </UserControl>
    cotebehind dans le constructueur du Usercontrol
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      molist2 = New System.Collections.ObjectModel.ObservableCollection(Of TypeClient2)
            molist2.Add(New TypeClient2("grp", "groupement"))
            molist2.Add(New TypeClient2("dep", "departement"))
            molist2.Add(New TypeClient2("reg", "region"))
            molist2.Add(New TypeClient2("com", "commune"))
            DataContext = Me


    Puis la property concerné dans la classe

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Public Property MyListeTypeClient As System.Collections.ObjectModel.ObservableCollection(Of TypeClient2)
            Get
                Return molist2
            End Get
            Set(ByVal value As System.Collections.ObjectModel.ObservableCollection(Of TypeClient2))
     
            End Set
     
     
        End Property

    La combo de nom combobox1 contient bien les 4 éléments, mais pas la combo typeclient dans la grid. Quel peut en être la raison

    Merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    C'est parce que ta propriété MyListeTypeClient ne notifie pas son changement (son affectation). Comme ton DataContext est fixé sur toi même, pour que ta propriété soit notifiable tu dois la remplacer par une property Dependency (snippet propdp).

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Bonjour,

    Merci de votre paride réponse.

    J'ai revu ma façon de faire et j'ai défini une grille seulement en lecture, et définie une fiche pour modifier chaque entré de mon datagrid.

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <data:DataGrid AutoGenerateColumns="False" Height="255" HorizontalAlignment="Left" Name="DataGrid1" VerticalAlignment="Top" Width="1000" SelectionMode="Single" IsHitTestVisible="True">
                <data:DataGrid.Columns>
                    <data:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="IdClient" IsReadOnly="True" Width="Auto"  Binding="{Binding IDClient, Mode=OneWay}" />
                    <data:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="false" Header="Type du client" IsReadOnly="True" Width="Auto" Binding="{Binding TypeClient,Mode=OneWay}" />

    puis en dehors de la grid:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                      <TextBox Height="23" HorizontalAlignment="Left" Margin="30,21,0,0" Name="txtIdClient" VerticalAlignment="Top" Width="120" Text="{Binding ElementName=DataGrid1,Path=SelectedItem.IDClient, Mode=TwoWay}"/>
     
                        <ComboBox Height="23" HorizontalAlignment="Left" Margin="30,50,0,0" Name="cmbTypeClient" VerticalAlignment="Top" Width="120" SelectedValue="{Binding ElementName=DataGrid1,Path=SelectedItem.TypeClient, Mode=TwoWay}" DisplayMemberPath="Libelle" SelectedValuePath="Cle"/>

    le binding s'effectue comme il faut, dans ma grille j'ai un typeclient ="grp" et lorsque je sélectionne cette ligne, il affiche automatiquement le Libelle"groupement" qui correspond à l'entré "grp" (le data source affecté à la combo est une observableColletion composé d'object TypeCLient atantjuste un libelle et une clé).
    Bref cela fonctionne quelque soit la ligne sélectionnée.

    Cependant si je viens à trier sur la grille CanUserSort="True", autant les textBox sont tjs bindé mais plus les combo, il 'narrive plus à sélectionner l'item dans la combo. Il se passe la même chose lorsque j'ajoute un nouvel item dans ma grille. Y'a t'il un raffraichisement quelconque à faire?

    Damien

Discussions similaires

  1. [VB.Net] inserer un champs bytes dans une requete sql
    Par flyer_ dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/05/2006, 09h56
  2. [VB.Net] Comment stocker un .doc dans une BDD ?
    Par SergeF dans le forum Contribuez
    Réponses: 8
    Dernier message: 12/10/2005, 12h43
  3. [VB.NET] Server.MapPath et Session dans une classe
    Par nancy54 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/09/2004, 14h23
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

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