Я пытаюсь использовать ItemTemplateSelector в WPF ListBox и посмотрел несколько примеров в Интернете.Казалось, достаточно просто, но я не могу заставить его работать.Я надеюсь, что кто-то может сказать мне, где я ошибся:
Кулак, у меня есть класс DataTemplateSelector, определенный следующим образом:
Public Class DocketDataTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
Return DataDocketHeaderTemplate
End Function
Private _DataDocketHeaderTemplate As DataTemplate
Public Property DataDocketHeaderTemplate() As DataTemplate
Get
Return _DataDocketHeaderTemplate
End Get
Set(ByVal value As DataTemplate)
_DataDocketHeaderTemplate = value
End Set
End Property
Private _DataDocketDataTemplate As DataTemplate
Public Property DataDocketDataTemplate() As DataTemplate
Get
Return _DataDocketDataTemplate
End Get
Set(ByVal value As DataTemplate)
_DataDocketDataTemplate = value
End Set
End Property
End Class
Очень просто - просто возвращает шаблон данных DataDocketHeaderTemplate дляпока я не смогу заставить его работать.
Затем у меня есть пользовательский элемент управления со следующим определением ресурса:
<UserControl.Resources>
<DataTemplate x:Key="docketHeaderTemplate">
<TextBlock Text="Header Row Test" Background="Yellow"/>
</DataTemplate>
<DataTemplate x:Key="docketDataTemplate">
<TextBlock Text="Data Row Test" Background="Green"/>
</DataTemplate>
<local:DocketDataTemplateSelector DataDocketHeaderTemplate="{StaticResource docketHeaderTemplate}" DataDocketDataTemplate="{StaticResource docketDataTemplate}" x:Key="myDataTemplateSelector"/>
</UserControl.Resources>
ListBox в пользовательском элементе управления просто определяется какthis:
<ListBox ItemsSource="{Binding TestData}" ItemTemplateSelector="{StaticResource myDataTemplateSelector}"/>
И, наконец, мой список TestData определен в моей связанной модели представления следующим образом:
Private _listTestData As ObservableCollection(Of String) = Nothing
Public Property TestData As ObservableCollection(Of String)
Get
If _listTestData Is Nothing Then
_listTestData = New ObservableCollection(Of String)
_listTestData.Add("Row 1")
_listTestData.Add("Row 2")
_listTestData.Add("Row 3")
End If
Return _listTestData
End Get
Set(ByVal value As ObservableCollection(Of String))
_listTestData = value
NotifyPropertyChanged("TestData")
End Set
End Property
Теперь я ожидаю увидеть список из 3 строк в моем спискевсе говорят «Проверка строки заголовка» (так как мой селектор данных dateate всегда возвращает DataDocketHeaderTemplate).Но вместо этого я вижу свои основные данные строки 1, строки 2, строки 3
Похоже, это указывает на то, что мой переопределяющий элемент dateatemplateselector не ударил (действительно, если я установил точку останова в DocketDataTemplateSelector, я ни разу не увижу егоудар).Куда я не так с этим?
Спасибо