2014-06-09 3 views
0

J'ai un problème où j'essaie d'utiliser une liste de raccourcis Telerik avec DataVirtualizationMode.Automatic, mais je n'arrive pas à le faire fonctionner. La raison pour laquelle je veux l'utiliser, c'est parce que je veux que mon application ne télécharge que les données (jeux) qui se trouvent dans la vue actuelle du contrôle Liste des sauts et pas toutes les données à chaque fois. Par exemple si j'ai cherché "Batman", et ses 50 jeux de retour, je ne veux pas qu'il télécharge et charge tous les jeux, seulement ceux que je peux voir dans le contrôle de liste de saut.Telerik RadJumpList utilisant DataVirtualizationMode.Automatic

Voici un exemple d'utilisation de DataVirtualizationMode.Automatic Telerik, mais je ne pouvais pas le faire travailler avec mon application: http://www.telerik.com/help/windows-phone/raddataboundlistbox-features-datavirtualization-automatic.html

Ci-dessous mon contrôle Jump List que je veux utiliser la virtualisation des données.

MainPage.xaml:

<phone:PivotItem Header="Browse"> 
      <Grid> 
       <telerikPrimitives:RadTextBox Name="txtSearch" HorizontalAlignment="Left" VerticalAlignment="Top" Height="80" Width="390"/> 
       <telerikPrimitives:RadImageButton Name="imgBtnSeachGame" VerticalAlignment="Top" HorizontalAlignment="Right" ButtonShape="Ellipse" BorderThickness="2" Margin="0,8,0,0" Click="imgBtnSeachGame_Click"></telerikPrimitives:RadImageButton> 

       <Controls:RadJumpList Name="jlGameList" ItemsSource="{Binding}" Tap="jlGameList_Tap" Margin="0,90,0,0" DataVirtualizationMode="Automatic"> 
        <Controls:RadJumpList.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto"></RowDefinition> 
            <RowDefinition Height="*"></RowDefinition> 
            <RowDefinition Height="20"></RowDefinition> 
           </Grid.RowDefinitions> 
           <Border Grid.Row="0" Background="{StaticResource PhoneAccentBrush}" 
     Padding="{StaticResource PhoneTouchTargetOverhang}" 
     Margin="0,0,0,0"> 
            <TextBlock Name="tblGameTitle" Style="{StaticResource PhoneTextGroupHeaderStyle}" ManipulationStarted="tblGameTitle_ManipulationStarted" ManipulationCompleted="tblGameTitle_ManipulationCompleted"> 
             <Run Text="{Binding GameTitle}"></Run> 
            </TextBlock> 
           </Border> 
           <Grid Background="#242424" Grid.Row="1"> 
            <Image Name="imgGameList" Margin="0,0,0,0" Stretch="Fill" HorizontalAlignment="Left" VerticalAlignment="Top" Height="96" Width="96"> 
             <Image.Source> 
              <BitmapImage UriSource="{Binding BoxArtFrontThumb}" 
           CreateOptions="BackgroundCreation" DecodePixelHeight="96" DecodePixelWidth="96" /> 
             </Image.Source> 
            </Image> 
            <TextBlock Margin="110,0,0,0" Text="Platform" FontWeight="Bold" TextWrapping="Wrap" Foreground="YellowGreen" FontSize="{StaticResource PhoneFontSizeNormal}"/> 
            <TextBlock Name="txtPlatform" Margin="110,20,0,0" Text="{Binding Platform}"></TextBlock> 

            <TextBlock Text="Release Date" FontWeight="Bold" Margin="110,46,0,0" Foreground="YellowGreen" FontSize="{StaticResource PhoneFontSizeNormal}"/> 
            <TextBlock Name="txtReleaseDate" Margin="110,66,0,0" Text="{Binding ReleaseDate}"></TextBlock> 
            <!--</StackPanel>--> 
           </Grid> 
           <Grid Grid.Row="2"></Grid> 
          </Grid> 
         </DataTemplate> 
        </Controls:RadJumpList.ItemTemplate> 

       </Controls:RadJumpList> 
      </Grid> 
     </phone:PivotItem> 

est ci-dessous où je lie mes DataContext à mon GetGamesListItems ObservableCollection dans ma classe GameData. La méthode d'événement imgBtnSearchGame_Click est appelée lorsqu'un utilisateur a tapé par exemple "Batman" dans ma zone de texte txtSearch et appuyé sur le bouton, il envoie alors le texte à ma méthode GetGamesListData.

MainPage.cs:

GameData gd = new GameData(); 

public MainPage() 
    { 
     InitializeComponent(); 
     jlGameList.DataContext = gd.GetGamesListItems; 
    } 

private void imgBtnSeachGame_Click(object sender, RoutedEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(txtSearch.Text)) 
     { 
      gd.GetGamesListData(txtSearch.Text, "", ""); 
     } 
    } 

ci-dessous est l'endroit où je télécharge les données en XML pour le nom du jeu recherché. Par exemple si c'est "Batman" il trouvera et retournera tous les jeux avec "Batman". La propriété "BoxArtFrontThumb" est où Im stocker toutes les images pour chaque jeu et utilise async, car parfois il peut y avoir beaucoup d'images qu'il doit télécharger et montrer.

GameData.cs

public void GetGamesListData(string name, string platform, string genre) 
    { 
     var webClient = new WebClient(); 
     webClient.DownloadStringCompleted += GetGamesListRequestCompleted; 
     webClient.DownloadStringAsync(new Uri("http://thegamesdb.net/api/GetGamesList.php?name=" + name)); 
    } 

    private async void GetGamesListRequestCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 

     if (e.Error == null) 
     { 
      GetGamesListItems.Clear(); 
      var feedXml = XDocument.Parse(e.Result); 
      var gameDataTasks = feedXml.Root.Descendants("Game").Select(
       async x => new GetGamesList 
       { 
        ID = (int)x.Element("id"), 
        GameTitle = (string)x.Element("GameTitle"), 
        ReleaseDate = (string)x.Element("ReleaseDate") ?? "N/A", 
        Platform = (string)x.Element("Platform") ?? "N/A", 
        BoxArtFrontThumb = new Uri(await GetBoxArtFrontThumbAsync((int)x.Element("id")), UriKind.RelativeOrAbsolute), 
       }).ToList(); 
      var gameData = await Task.WhenAll(gameDataTasks); 
      foreach (var item in gameData) 
      { 
       GetGamesListItems.Add(item); 
      } 
     } 
    } 

Ci-dessous, où ses conclusions et le stockage des images pour les jeux. J'espère vraiment que j'ai bien expliqué cela et j'espère qu'il y a quelqu'un qui peut m'aider à résoudre ce problème. Merci.

+0

Question d'Question: Avez-vous une licence Telerik? Vous pouvez soumettre un ticket de support où vous pouvez joindre le projet et nous pouvons l'étudier directement (lien ci-dessous). Répondez avec le numéro de ticket et je ferai une enquête maintenant, dans le pire des cas, je demanderai à quelqu'un de l'équipe de développement qui a construit le JumpList de vous répondre dans les 24 heures. Soumettre un ticket ici http://www.telerik.com/account/support-tickets/available-support-list.aspx –

+0

ID de ticket: 821588 – Thunder

+0

Merci, travaillez dessus maintenant. –

Répondre

1

Bien que vous utilisiez JumpList, le mécanisme de virtualisation des données est identique à celui de DataBoundListBox. (Vous pouvez trouver plus d'informations here in the DataBoundListBox docs Il existe un bon didacticiel utilisant un service OData.)

Pour que le mode automatique fonctionne correctement, vous devez utiliser l'objet VirtualizingDataCollection de Telerik et l'initialiser avec les arguments appropriés (compte et taille de la page).

Je ne vois pas cela dans le code que vous avez fourni ci-dessus, pouvez-vous s'il vous plaît ouvrir un ticket de support afin que je puisse enquêter plus loin? Voir mon commentaire ci-dessus pour le lien. Faites-moi savoir le numéro de ticket et je vous fournirai une assistance supplémentaire.

+0

J'ai déjà fait un ticket de support avec ce problème avec l'ID de ticket: 821588 – Thunder

Questions connexes