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 :

Listview dans DataGrid qui ne se recharge pas sur RaisePropertyChanged [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Listview dans DataGrid qui ne se recharge pas sur RaisePropertyChanged
    Bonjour à tous,

    J'ai une listview dans une grid view qui ne se recharge pas automatiquement lors de l'ajout d'un item.
    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
            <DataGrid x:Name="dgMain" AutoGenerateColumns="False" Drop="cbGroupesLdap_Drop" DragEnter="cbGroupesLdap_DragEnter" AllowDrop="True">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Libellé" Width="100" Binding="{Binding name}"></DataGridTextColumn>
                    <DataGridTextColumn Header="Valeur" Width="100" Binding="{Binding value}"></DataGridTextColumn>
                    <DataGridTemplateColumn Header="Groupes LDAP" Width="100" IsReadOnly="True">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ListView x:Name="cbGroupesLdap" ItemsSource="{Binding Path=groupesLdap, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"></ListView>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
            <ListView Name="lvGrpsLdap" Grid.Column="1" Grid.Row="0" ItemTemplate="{StaticResource lvTemplate}" 
                PreviewMouseLeftButtonDown="lvGrpsLdap_PreviewMouseLeftButtonDown" PreviewMouseMove="lvGrpsLdap_PreviewMouseMove"/>
    En gros, j'ai des éléments dans ma listview lvGrpsLdap et lorsque je glisse l'un d'eux dans ma listview cbGroupesLdap, ca fonctionne bien en code behind, mais visuellement, ça n'a pas d'effet.
    J'ai essayé de passer en attaquant directement la classe (j'utilise MVVM-Light):
    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
     
        public class tblGroup : vmBase {
     
            #region Proprietés
            public static string nomTable = "tblGroups";
            public static string nomChampId = "grpId";
     
            private string _name, _value;
            //private IList<string> _groupesLdap;
            [DataMember]
            public int id { get; set; }
            [DataMember]
            public string name { get { return _name; } set { _name = value; OnPropertyChanged("name"); } }
            [DataMember]
            public string value { get { return _value; } set { _value = value; OnPropertyChanged("value"); } }
            [DataMember]
            //public IList<string> groupesLdap { get { return _groupesLdap; } set { _groupesLdap = value; OnPropertyChanged("groupesLdap"); } }
            public IList<string> groupesLdap { get; set; }
            #endregion
    ...
            public void AddLdap(string elmt) {
                if (!groupesLdap.Contains(elmt)) {
                    groupesLdap.Add(elmt);
                    OnPropertyChanged("groupesLdap");
                }
            }
    J'ai essayé aussi en MVVM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            public MainViewModel(IDataAccessService servPxy, IDataAccessServiceGroups servPxyGrps) {
                ...
                AddGroupLdapCommand = new RelayCommand<Tuple<tblGroup, string>>(AddGroupLdap);
            }
            void AddGroupLdap(Tuple<tblGroup, string> prms) {
                var g = Groups.Where(a => a == prms.Item1).SingleOrDefault();
                if (g != null) { g.AddLdap(prms.Item2); RaisePropertyChanged("Groups"); }
            }
    Mais rien à faire.

    Si, dnas mes traitements, je change le nom de name ou value, ca impacte directement la grille... Les mécanismes sont donc bons.

    Quelqu'un aurait-il un idée ?
    David.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bon, ça fonctionne.

    J'ai fait pas mal de choses, je ne suis donc pas sur de ce qui a eu un réel impact sur la bête, mais je pense que c'est ça:

    public ObservableCollection<string> groupesLdap { get; set; }

    Au lieu de

    public IList<string> groupesLdap { get; set; }

    Tout bêtement.

    Je met mon message d'erreur pour les robots de notre moteur préféré:
    "Un ItemsControl est incohérent avec sa source items. Pour plus d'informations, consultez l'exception interne."
    ;-)
    David.

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

Discussions similaires

  1. [AC-2007] champ dans formulaire qui ne se remplit pas
    Par pepsister dans le forum IHM
    Réponses: 4
    Dernier message: 05/09/2010, 12h51
  2. Réponses: 4
    Dernier message: 10/05/2010, 14h50
  3. Animation flash qui ne se recharge pas avec Firefox
    Par belllangelo dans le forum Flash
    Réponses: 0
    Dernier message: 14/10/2009, 09h59
  4. Réponses: 3
    Dernier message: 03/10/2009, 22h51
  5. [VBA-E] Fonction qui ne se recharge pas
    Par iupien78 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/01/2007, 21h23

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