2012-01-09 25 views
1

我正在嘗試在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斷點我的核心數據,在任何時候我看到它被擊中)。我在哪裏錯了?

感謝

回答

1

對不起,我不能張貼此作爲評論,我沒有足夠的分數。

我剛剛嘗試過你的示例代碼(我的第一個VB項目),猜猜它是什麼,它按預期工作:在黃色背景上三次「Header Row Test」。我已將ListBox放入UserControl中的網格中,然後將UserControl放置在窗口中的網格中,然後使用TestData屬性將UserControl的DataContext設置爲ViewModel對象。

有些東西一定是錯的,但是您的示例代碼沒有演示,也許您可​​以提供更多信息。

+0

嗯,這很有趣。我的錯誤顯然在其他地方。我會繼續挖掘。感謝您的輸入。 – Gatmando 2012-01-10 00:13:04

+0

最後,問題與影響我們項目中所有ListBox的特定ListBox風格有關。克萊門斯我將你的答覆標記爲你的答案,因爲你將我引向解決方案。非常感謝。 – Gatmando 2012-01-10 13:38:14

相關問題