我正在嘗試在WPF ListBox上使用ItemTemplateSelector,並在線查看了幾個示例。看起來很簡單,但我無法讓它工作。我希望有人能告訴我在哪裏,我出了錯: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 DataTemplate中暫時直到我可以讓它工作。
然後我有我用了以下的資源定義的用戶控件:
<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 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
現在,我希望我會se e列表框中的3行列表全部說'Header Row Test'(因爲我的datatemplateselector總是返回DataDocketHeaderTemplate)。而是我看到 行1 行2 行3
這似乎表明,我的首要datatemplateselector沒有被擊中(事實上,如果我設置在DocketDataTemplateSelector斷點我的核心數據,在任何時候我看到它被擊中)。我在哪裏錯了?
感謝
嗯,這很有趣。我的錯誤顯然在其他地方。我會繼續挖掘。感謝您的輸入。 – Gatmando 2012-01-10 00:13:04
最後,問題與影響我們項目中所有ListBox的特定ListBox風格有關。克萊門斯我將你的答覆標記爲你的答案,因爲你將我引向解決方案。非常感謝。 – Gatmando 2012-01-10 13:38:14