Salut,
Je suis en train de développer une appli WPF qui permet d'ouvrir plusieurs documents (type MDI) dans un TabControl.
J'ai repris l'architecture que j'avais déjà utilisé une fois, à savoir :
- une liste de mes objets métier (Documents) dans une ObservableCollection dans ma classe App
- un UserControl qui affiche un Document
- un TabControl bindé sur la liste des documents, avec des templates pour afficher les documents :
Code XML : 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 <Window.Resources> <DataTemplate x:Key="tplDocumentTabContent"> <my:DocumentControl Document="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl}}"/> </DataTemplate> <DataTemplate x:Key="tplDocumentTabHeader" DataType="{x:Type model:Document}"> <Border> <TextBlock Text="{Binding DisplayName}"/> <Border.InputBindings> <MouseBinding MouseAction="MiddleClick" Command="Close"/> </Border.InputBindings> </Border> </DataTemplate> </Window.Resources> ... <TabControl Name="tabDocuments" ItemTemplate="{StaticResource tplDocumentTabHeader}" ContentTemplate="{StaticResource tplDocumentTabContent}" ItemsSource="{Binding Documents, Source={x:Static Application.Current}}" SelectedItem="{Binding ActiveDocument, Source={x:Static Application.Current}}" />
Ce qui me pose problème, c'est que pour le contenu, ça ne crée pas systématiquement une nouvelle instance de mon UserControl pour chaque nouveau document, en général ça réutilise la même... et ce n'est pas du tout ce que je veux, parce que l'éditeur proprement dit est un ICSharpCode.TextEditor (inclus via un WindowsFormsHost) qui maintient son propre état, différent pour chaque document. J'ai donc besoin d'avoir une instance différente de mon UserControl pour chaque document.
La dernière fois que j'avais utilisé ce système, mon UserControl était entièrement bindé à l'objet métier, et tout se passait sans problème : les bindings étaient simplement mis à jour au changement de document, et je n'y voyais que du feu, je n'avais pas réalisé que c'était la même instance du UserControl qui était utilisée... Sauf que cette fois-ci c'est gênant
Est-ce que quelqu'un aurait une solution à ce problème ? Ou est-ce que je m'y suis mal pris dans la définition des templates pour le TabControl ? (Pour le ContentTemplate ça me semble un peu bancal...)
Ou alors y a-t-il une technique complètement différente que je pourrais utiliser pour réaliser cette interface ?
Partager