Панель виртуализации стека, возвращающая ноль выбранного элемента - PullRequest
4 голосов
/ 22 сентября 2011

Я использовал панель стека для отображения элементов списка, но когда я решил сменить ее на виртуальную, выбранный элемент иногда оказывался нулевым. Вот часть 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 голосов
/ 30 сентября 2011

Моим лучшим предположением будет то, что выбранный вами элемент является нулевым, если он не отображается в списке.

Я думаю, это имеет смысл из-за виртуализации, хотя она и странная.

Ваше решение, скорее всего, заключается в том, что при изменении выбранного элемента вы обязательно вносите его для просмотра. Взгляните на этот вопрос , чтобы разобраться.

Удачи и HTH

0 голосов
/ 23 сентября 2011

Может быть, вы можете определить FallBackValue внутри вашей привязки , чтобы вернуть FallBackValue вместо нуля.

...