Bonjour à tous,
J'ai une listview dans une grid view qui ne se recharge pas automatiquement lors de l'ajout d'un item.
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.
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"/>
J'ai essayé de passer en attaquant directement la classe (j'utilise MVVM-Light):
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
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"); } }
Mais rien à faire.
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"); } }
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 ?
Partager