我需要根据 ListBox 项目数更改我的 ListBox 的 DataTemplate。我想出了以下 XAML:
<Window.Resources>
<DataTemplate x:Key="DefaultTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Text}"/>
<TextBlock Text="default template" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="OtherTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Text}"/>
<TextBlock Text="other template" />
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListBox Name="listBox1" ItemsSource="{Binding Path=Items}">
<ListBox.Style>
<Style TargetType="{x:Type ListBox}">
<Setter Property="ItemTemplate" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Items.Count}" Value="1">
<Setter Property="ItemTemplate" Value="{StaticResource OtherTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
使用上面的 XAML,一旦我将两个或更多项目添加到绑定列表中,数据模板就会按预期更改(从其他更改为默认)。但是,如果我删除列表中包含两个以上项目的第一项,则整个列表框将变为空(我验证了绑定列表是非空的)。删除两个项目列表中的第二个项目可以正常工作(即模板从默认更改为其他)。
任何想法为什么会发生这种情况?或者我可能用错误的方法来解决这个问题?