2010-11-17 16 views
0

J'ai une grille de données qui affiche une liste de commandes. Au-dessus de la grille de données, il y a une boîte qui filtre les commandes en capturant l'entrée de texte, puis en appelant une méthode côté serveur pour obtenir des commandes correspondant au texte fourni. Cela fonctionne bien sur la page.La grille de données Silverlight ne se reconnecte pas aux nouvelles données

J'ai essayé d'ajouter une page qui transmet des paramètres via querystring qui appliquerait automatiquement un filtre lorsque l'utilisateur se poserait sur la page. Le code pour appeler la méthode côté serveur est appelé correctement et les données sont renvoyées correctement, mais la grille de données n'indique pas les résultats. Si je tape le même texte dans la zone de texte sur la page et la recherche, les résultats sont finalement affichés sur le DataGrid. C'est presque comme si le DataGrid ne voyait pas le changement la première fois que l'utilisateur arrive sur la page avec un filtre automatique. Voici quelques bits relavent:

protected override void OnNavigatedTo(NavigationEventArgs e) { 
     if (NavigationContext.QueryString.ContainsKey("filterkeyword") && NavigationContext.QueryString.ContainsKey("filtervalue")) { 
      string filterkeyword = NavigationContext.QueryString["filterkeyword"]; 
      string filtervalue = NavigationContext.QueryString["filtervalue"]; 

      switch (filterkeyword) { 
       default: ApplyDefaultFilter(filtervalue); break; 
      } 
     } else { 
      ApplyDefaultFilter(""); 
     } 
    } 

Le DataGrid est simplement lié à un objet source de données et la source de données n'est pas réglé à la charge automatique. Voici les bits lorsqu'un utilisateur ne présente une recherche via la boîte de filtre:

private void txtFilter_KeyDown(object sender, KeyEventArgs e) { 
     if (e.Key == Key.Enter) { 
      ApplyDefaultFilter(txtFilter.Text); 
      txtFilter.Select(0, txtFilter.Text.Length); 
     } 
    } 

Ils appellent tous deux les mêmes méthodes et renvoient les résultats, il est juste que la zone de texte indique en quelque sorte la page pour actualiser la DataGrid et comme par magie les données apparaissent. Y at-il un événement que je peux forcer sur la page pour provoquer une actualisation de la grille de données?

Répondre

0

Est-ce que votre objet datasouce implémente INotifyPropertyChanged ou s'il s'agit d'une collection, est-ce un ObservableCollection?

Le TextBox renvoie les modifications AFAIK.

0

J'ai ajouté ceci et cela semble fonctionner ... bien que cela semble être un peu de kludge. Je n'avais pas besoin de cela lors du filtrage dans la page, mais la redirection de l'utilisateur vers la page nécessite ceci .... impair.