我正在尝试在WPF ListBox上使用ItemTemplateSelector,并在线查看了几个示例。看起来很简单,但我不能让它工作。我希望有人能告诉我我哪里错了:
首先,我有一个定义如下的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定义如下:
<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行组成的列表,上面都写着“Header Row Test”(因为我的datatemplateselector总是返回DataDocketHeaderTemplate)。但我看到的是第1行第2行第3行的核心数据
这似乎表明我的覆盖数据平台选择器没有被命中(实际上,如果我在DocketDataTemplateSelector中设置了一个断点,我在任何时候都看不到它被命中)。我在哪里做错了呢?
谢谢
发布于 2012-01-10 07:28:44
对不起,我不能把这个作为评论发布,我还没有得到足够的分数。
我刚刚尝试了你的示例代码(我的第一个VB项目),猜猜发生了什么,它像预期的那样工作:在黄色背景上三次"Header Row Test“。我将ListBox放在UserControl的网格中,然后将UserControl放在窗口的网格中,然后使用TestData属性将UserControl的DataContext设置为ViewModel对象。
你的示例代码肯定没有显示出错误的地方,也许你可以提供更多的信息。
https://stackoverflow.com/questions/8794593
复制相似问题