2013-02-17 5 views
0

Я использую следующий код, чтобы сделать страницу с LongListSelector и добавить ContextMenu, когда пользователь сделал долгое нажатие на ListBoxItem:LongListSelector и ContextMenu

<Controls:LongListSelector Height="Auto" x:Name="historylist" HorizontalContentAlignment="Stretch" 
            Background="White" SelectionChanged="DidPressSelectItem" Hold="HoldListBox"> 
      <Controls:LongListSelector.ItemTemplate> 
       <DataTemplate> 
        <local:SearchTemplateSelector Content="{Binding}" HorizontalContentAlignment="Stretch"> 
         <toolkit:ContextMenuService.ContextMenu> 
          <toolkit:ContextMenu> 
           <toolkit:MenuItem Header="Remove from history" Click="DeleteVideoFromHistory"/> 
           <toolkit:MenuItem Header="Remove from cache" Click="DeleteVideoFromCache"/> 
          </toolkit:ContextMenu> 
         </toolkit:ContextMenuService.ContextMenu> 

         <local:SearchTemplateSelector.VideoTemplate> 
          <DataTemplate> 
           <Grid> 
            <Rectangle Height="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Fill="Black" Opacity="0.3" /> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="100" /> 
              <ColumnDefinition Width="*" /> 
             </Grid.ColumnDefinitions> 
             <Image Margin="0" Source="{Binding Path=ImgUrl}" HorizontalAlignment="Left" Width="100" Height="100" Tag="{Binding idStr}"/> 
             <Grid Grid.Column="1" Margin="10,0,8,0"> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="60"/> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="*"/> 
              </Grid.RowDefinitions> 
              <TextBlock Text="{Binding Name}" FontSize="20" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
              <StackPanel Orientation="Horizontal" Margin="0,-5,0,0" Grid.Row="1"> 
               <TextBlock Text="Views: " FontSize="20" Foreground="Black"/> 
               <TextBlock Text="{Binding ViewCount}" FontSize="20" Foreground="Black"/> 
              </StackPanel> 

              <Grid Grid.Row="2"> 
               <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="*"/> 
                <ColumnDefinition Width="*"/> 
               </Grid.ColumnDefinitions> 

               <TextBlock Text="{Binding TimeStr}" FontSize="20" Foreground="Black" Margin="0,0,0,0" /> 
              </Grid> 
             </Grid> 
            </Grid> 

           </Grid> 

          </DataTemplate> 
         </local:SearchTemplateSelector.VideoTemplate> 

         <local:SearchTemplateSelector.VideoTemplateCached> 
          <DataTemplate> 
           <Grid> 
            <Rectangle Height="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Fill="Black" Opacity="0.3" /> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="100" /> 
              <ColumnDefinition Width="*" /> 
             </Grid.ColumnDefinitions> 
             <Image Margin="0" Source="{Binding Path=ImgUrl}" HorizontalAlignment="Left" Width="100" Height="100" Tag="{Binding idStr}"/> 
             <Grid Grid.Column="1" Margin="10,0,8,0"> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="60"/> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="*"/> 
              </Grid.RowDefinitions> 
              <TextBlock Text="{Binding Name}" FontSize="20" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
              <StackPanel Orientation="Horizontal" Margin="0,-5,0,0" Grid.Row="1"> 
               <TextBlock Text="Views: " FontSize="20" Foreground="Black"/> 
               <TextBlock Text="{Binding ViewCount}" FontSize="20" Foreground="Black"/> 
              </StackPanel> 

              <Grid Grid.Row="2"> 
               <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="*"/> 
                <ColumnDefinition Width="*"/> 
               </Grid.ColumnDefinitions> 

               <TextBlock Text="{Binding TimeStr}" FontSize="20" Foreground="Black" Margin="0,0,0,0" /> 
               <TextBlock Text="Cached" FontSize="20" Foreground="Red" Margin="50,0,0,0" Grid.Column="1" /> 
              </Grid> 
             </Grid> 
            </Grid> 

           </Grid> 

          </DataTemplate> 
         </local:SearchTemplateSelector.VideoTemplateCached> 

        </local:SearchTemplateSelector> 
       </DataTemplate> 


      </Controls:LongListSelector.ItemTemplate> 
     </Controls:LongListSelector> 

И это DeleteVideoFromHistory метод:

private void DeleteVideoFromHistory(object sender, RoutedEventArgs e) 
    { 
     VideoItem video = (sender as MenuItem).DataContext as VideoItem; 
     if (video == null) { return; } 

     historyRep.RemoveFromHistory(video); 
     this.RelodeTableData(); 
    } 

Проблема заключается в том, что когда ai нажмите кнопку Longpress on и элемент и щелкните один из элементов в ContextMenu и снова нажмите на другой список, я получаю последний VideoItem, а не текущий, который я только что нажал. Любая идея, как это исправить?

ответ

0

У меня тоже были эти проблемы, и я решил это, очистив DataContext от Unload ContextMenu.

private void ContextMenu_Unload(object sender, RoutedEventArgs e) 
    { 
     ContextMenu conmen = (sender as ContextMenu); 
     conmen.ClearValue(FrameworkElement.DataContextProperty); 
    } 
Смежные вопросы