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
今、私は私のリストボックス内の3行のリストはすべて、 'Header Row Test'と言っています(私のdatatemplateselectorは常にDataDocketHeaderTemplateを返しています)。しかし、その代わりに、私はこれは私がDocketDataTemplateSelectorにブレークポイントを設定して実際にあれば(私のオーバーライドdatatemplateselectorがヒットされていないことを示していると思われる 行1 行2 行の私のコアデータ3
を参照して、時間がない時に私はそれを見ていますヒットする)。私はどこでこれに間違っていますか?私はコメントとしてこれを投稿することができない
おかげ
これは興味深いです。私のエラーは明らかに他の場所です。私は掘り続けます。あなたのご意見ありがとうございます。 – Gatmando
最後に、この問題は、プロジェクトのすべてのリストボックスに影響を与えていた特殊なListBoxスタイルに関連しています。 Clemens私は解決策に導いてくれたので、答えとしてあなたの回答をマークしています。どうもありがとう。 – Gatmando