Bonjour,
Je vais essayer d'être le plus clair possible dans mon explication.
Je souhaite créer un "custom control" à partir d'un style hébergé dans un resource dictionary.
-> fichier ToggleTextboxComment.xaml (de type bibliotèque de ressources)
Dans celui ci se trouve une grosse balise style qui définie l'aspect de mon contrôle.
En target type, j'ai mis v:ToggleTextboxComment (v pour le namespace view)
Dans le namespace view, j'ai une déclaration de classe comme suis :
J'ai également le view model qui va bien dans le namespace viewmodel (vm):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class ToggleTextboxComment : ContentControl { ToggleTextboxCommentViewModel vm; public ToggleTextboxComment() { if (vm == null) vm = new ToggleTextboxCommentViewModel(); this.DataContext = vm; } }
La classe viewModelBase<T> dont hérite ToggleTextboxCommentViewModel est un outil mis en place au seins de mon équipe pour faciliter la gestion des propertychange etc etc qui lui même dérive de viewmodelbase proposé par galasoft.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 internal class ToggleTextboxCommentViewModel : G.U.Common.Ui.ViewModel.ViewModelBase<ToggleTextboxCommentViewModel> { private string _commentaire; private string _texteHint; private string _texteTextbox; private bool _actif; public string Commentaire { get => _commentaire; set { Set(ref _commentaire, value); } } public string TexteHint { get => _texteHint; set { Set(ref _texteHint, value); } } public string TexteTextbox { get => _texteTextbox; set { Set(ref _texteTextbox, value); } } public bool Actif { get => _actif; set { Set(ref _actif, value); } } } }
Rendu là, j'ai donc 3 éléments qui permettent de "définir" un contrôle au complet.
Là où ça coince, c'est lorsque je souhaite utiliser ce contrôle depuis une page.
Dans une page (Rapport.xaml):
Dans les resources dictionnary, je déclare ça :
Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <ResourceDictionary> <DataTemplate x:Key="controlDataTemplate" DataType="{x:Type vm:ToggleTextboxCommentViewModel}" > <v:ToggleTextboxComment Style="{StaticResource styleToggleTextboxComment}"/> </DataTemplate> </ResourceDictionary>
et ensuite dans la grid de ma page, j'utilise ce contrôle au seins d'une liste :
Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part <ListBox ItemsSource="{Binding ToggleElements}" ItemTemplate="{StaticResource controlDataTemplate}"/>
La liste ToggleElements est instanciée dans RapportViewModel comme suit :
Le problème qui se pose, c'est que lorsque le contrôle s'affiche, il ne reflète pas les données saisies...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private ObservableCollection<ToggleTextboxCommentViewModel> _toggleElements = new ObservableCollection<ToggleTextboxCommentViewModel>(); public IEnumerable<ToggleTextboxCommentViewModel> ToggleElements => _toggleElements; public RapportViewModel() { ToggleTextboxComment tgc = new ToggleTextboxComment(); _toggleElements.Add(new ToggleTextboxCommentViewModel("un commentaire", "", "", true)); }
j'ai le bon compte, si je rajoute un autre toggleTextboxComment pour le Add, j'aurais bien 2 contrôle affiché, mais le toggle button qui devrait être sur la position true, reste a false et le commentaire ne contient rien.
Je bloque sur ce problème depuis un certain temps et je tourne en rond.
Peut être qu'une bonne âme aurait une solution pour mon problème.
A vot' bon coeur !!
Partager