Bonjour @ tous,
J'ai un cas de figure un peu tordu.
Dans une popup, j'ai une combobox chargée complètement en XAML, lié à mon ViewModel..
Dans mon ViewModel (simplifié ici) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <ComboBox Grid.Column="1" Grid.Row="0" Name="cbGroup" SelectedIndex="0"> <ComboBoxItem Content="{Binding ElmtInfo.Tag}"/> </ComboBox>
Mon model ressemble à ça:
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 public class ViewModelPlanningEtudes: ViewModelBase { ... public GanttRowGroup ElmtInfo { get { return _ElmtInfo; } set { _ElmtInfo = value; RaisePropertyChanged(nameof(ElmtInfo)); } } public GanttRow RowInfo { get { return _RowInfo; } set { _RowInfo = value; RaisePropertyChanged(nameof(RowInfo)); } } public GanttTask TaskInfo { get { return _TaskInfo; } set { _TaskInfo = value; RaisePropertyChanged(nameof(TaskInfo)); } } void SendInfo(Tuple<GanttRowGroup, GanttRow, GanttTask> obj) { if (obj != null) { Messenger.Default.Send<MessageCommunicator>(new MessageCommunicator() { GanttGroup = obj.Item1, GanttRow=obj.Item2, GanttTask=obj.Item3 }); } } void ReceiveInfo() { Messenger.Default.Register<MessageCommunicator>(this, (obj) => { this.ElmtInfo = obj.GanttGroup; // Stocke l'objet. this.RowInfo = obj.GanttRow; this.TaskInfo = obj.GanttTask; }); } }
Et (important), mon Tag contient un autre objet complexe, qui est une copie de la structure de Gantt, mais orienté BDD.
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 public class GanttRowGroup: GanttBase { private object _tag; public object Tag { get { return _tag; } set { _tag = value; OnPropertyChanged(nameof(Tag)); } } public ObservableCollection<GanttRow> Rows { get; set; } public GanttRowGroup() { Rows = new ObservableCollection<GanttRow>(); } public override string ToString() { return (Tag!=null)? Tag.ToString(): "GanttRowGroup"; } } public class GanttBase: DependencyObject, INotifyPropertyChanged { .... }
Lorsque je veux lancer ma popup, j'utilise le messager (du MVVM Light) pour charger les objets.
Jusque là tout, fonctionne très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m.SendCommand.Execute(new Tuple<GanttRowGroup, GanttRow, GanttTask>(g, r, t)); pppTaskEdit.IsOpen = true;
Mais pour aller plus loin, j'avais besoin de manipuler les objets du Gantt, et non plus, des tag des objets (un niveau plus haut, donc).
Pas de soucis, me dis-je, il suffit de charger la CB directement dur l'objet du GANTT (d'ôter juste le Tag, donc):
Mais là, surprise, il me met ma CB à vide, et si je la déroule, l'élément désiré est bien sélectionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <ComboBox Grid.Column="1" Grid.Row="0" Name="cbGroup" SelectedIndex="0"> <ComboBoxItem Content="{Binding ElmtInfo}"/> </ComboBox>
Encore plus fort, si je valide mon formulaire (en laissant la CB à vide, telle qu'elle a été chargée), c'est bien l'élément désiré que est retourné, alors que visuellement, la sélection de la CB est à vide si on ne la déroule pas. 0_0
J'ai essayé des SelectedValuePath, de la charger via le codeBehind par selectedIndex et SelectedItem, mais c'est toujours la même chose.
C'est un comportement que j'ai reproduit sur un autre objet, qui possède plusieurs items et un SelectedItem non pas à 0, mais Bindé sur un objet. Toujours le même soucis (les rows de ElmtInfo, en l'occurence).
Est ce que quelqu'un a une idée ?
Merci d'avance.
Partager