Bonjour à tous,

Je viens d'implémenter un fonctionnement sur un listbox permettant d'utiliser plusieurs templates différents qui seront choisis selon un critere de l'objet bindé en tant qu'item.

Voici le code :

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
 
Public Class MultiTemplateListBox
    Inherits ListBox
 
    Public Shared ReadOnly TemplateSelectorProperty As DependencyProperty = _
        DependencyProperty.Register("TemplateSelector", GetType(LstDataTemplateSelector), GetType(MultiTemplateListBox), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnTemplateChanged)))
 
    Public Property TemplateSelector() As LstDataTemplateSelector
        Get
            Return Me.GetValue(TemplateSelectorProperty)
        End Get
        Set(ByVal value As LstDataTemplateSelector)
            Me.SetValue(TemplateSelectorProperty, value)
        End Set
    End Property
 
    Protected Overrides Sub PrepareContainerForItemOverride(ByVal element As System.Windows.DependencyObject, ByVal item As Object)
        MyBase.PrepareContainerForItemOverride(element, item)
 
        Dim listBoxItem As ListBoxItem = element
        If listBoxItem IsNot Nothing Then
            listBoxItem.ContentTemplate = Me.TemplateSelector.SelectTemplate(item, Me)
        End If
 
    End Sub
 
    Private Shared Sub OnTemplateChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
 
    End Sub
 
End Class
 
Public Class LstDataTemplateSelector
 
    Public Overridable Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject)
        Return Nothing
    End Function
 
End Class
Cela fonctionne très bien mais lorsque je modifie la valeur de l'élément bindé, le listbox ne retourne pas dans le templateselector pour changer de template.
Sauriez vous comment je pourrais le forcer à le faire svp ?

Merci d'avance
@+