我使用堆栈面板显示列表框项目,但当我决定将其更改为虚拟化项目时,所选项目有时为空。这是我用来调用所选项命令的DataTemplate的一部分:
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding IsSelected}" Value="True">
<i:InvokeCommandAction CommandParameter="{Binding}"
Command="{Binding DataContext.SelectItemCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}, Mode=FindAncestor}}" />
</ei:DataTrigger>
</i:Interaction.Triggers>
这是ListBox:
<ListBox x:Name="_itemsListBox"
Grid.Row="1"
ScrollViewer.CanContentScroll="true"
ItemsSource="{Binding Items}"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemTemplate="{StaticResource ListItemTemplate}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
如果我关闭虚拟化,这个问题就不会发生。如何防止它返回空项?
答案 0 :(得分:0)
也许您可以定义FallBackValue inside your Binding,以取回FallBackValue而不是null。
答案 1 :(得分:0)
我最好的猜测是,当列表框中的视图不可用时,您选择的项目为空。
我认为这是有道理的,因为虚拟化虽然很奇怪。
您的解决方案很可能是当您选择的项目发生变化时,请确保将其置于视图中。看看this question来解决这个问题。
祝你好运&amp; HTH