虚拟化堆栈面板返回空选择项

时间:2011-09-22 17:29:25

标签: c# wpf listbox virtualizingstackpanel

我使用堆栈面板显示列表框项目,但当我决定将其更改为虚拟化项目时,所选项目有时为空。这是我用来调用所选项命令的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>

如果我关闭虚拟化,这个问题就不会发生。如何防止它返回空项?

2 个答案:

答案 0 :(得分:0)

也许您可以定义FallBackValue inside your Binding,以取回FallBackValue而不是null。

答案 1 :(得分:0)

我最好的猜测是,当列表框中的视图不可用时,您选择的项目为空。

我认为这是有道理的,因为虚拟化虽然很奇怪。

您的解决方案很可能是当您选择的项目发生变化时,请确保将其置于视图中。看看this question来解决这个问题。

祝你好运&amp; HTH