2015-06-06 4 views
0

В моем приложении для Windows-приложений на одной из страниц содержится LongListSelector. В этом LongListSelector Я использую некоторые преобразователи. Когда LongListSelector Loaded the Converters вызывается как обычно. Но когда я вызываю метод ScrollTo() для прокрутки к определенному элементу LongListSelector, преобразователи снова вызываются. Почему конвертеры снова вызываются? Что делает метод ScrollTo(), который вызывает повторный вызов преобразователей?Почему конвертеры называются снова?

Пример кода:

XAML:

<phone:LongListSelector ItemTemplate="{StaticResource LLSItemSource}" 
         Name="ChatListBox"> 

    <phone:LongListSelector.ItemTemplate> 
     <DataTemplate> 
      <Grid Background="Transparent" 
        Visibility="{Binding ID, Converter={StaticResource visibilityConverter}}" 
        Margin="0,6"> 

      <toolkit:ContextMenuService.ContextMenu> 
       <toolkit:ContextMenu> 
        <toolkit:MenuItem Header="delete" 
             Click="ContextMenuItem_Click" /> 
       </toolkit:ContextMenu> 
      </toolkit:ContextMenuService.ContextMenu> 

      <Border Background="Black" 
        HorizontalAlignment="Center" 
        Padding="30,5,30,8" 
        CornerRadius="20"> 
       <TextBlock Text="{Binding Date, Converter={StaticResource dateStringConverter}}" 
          Foreground="White" 
          FontSize="20" /> 
      </Border> 
     </Grid>  
    </DataTemplate> 
</phone:LongListSelector.ItemTemplate> 

CS:

private void ContextMenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    string header = (sender as MenuItem).Header.ToString(); 
    MessageModel selectedListBoxItem = (sender as MenuItem).DataContext as MessageModel; 

    if (selectedListBoxItem == null) 
     return; 

    if (header == "delete") 
    { 
     DeleteItemByID(selectedListBoxItem.ID); 

     if (ChatListBox.ItemsSource.Count > 0) 
     { 
      ChatListBox.ScrollTo(ChatListBox.ItemsSource[delIndex - 1]); // here I am scrolling to the last item that causes converters to be called again 
     } 
    } 
} 
+0

, пожалуйста, поделитесь фрагментом кода. – Nishi

+0

Я добавил код. @Nishi проверьте пожалуйста. – raisul

+0

Без [хорошего, _minimal_, _complete_ code example] (http://stackoverflow.com/help/mcve), который наглядно иллюстрирует ваш вопрос, невозможно ответить на любые «почему?». вопрос с любой конкретной деталью. Тем не менее, наиболее вероятная причина заключается в том, что список «виртуализирован», что означает, что фактические отображаемые элементы создаются «на лету» по мере необходимости. Таким образом, ваш конвертер также будет вызван по мере необходимости. Независимо от того, вы никогда не должны делать предположений о том, когда и как часто будет вызываться ваш конвертер; есть несколько причин, по которым структура может потребовать его вызова. –

ответ

0

Вы написаны конвертер для элементов longlistselector. При загрузке каждого элемента в селекторе его выполнение выполняется для преобразования значения по заданному шаблону