2010-03-10 15 views
0

J'ai une requête LINQ anonyme que je lie à une grille de données, quand je débogue cela corrige les données mais ça n'apparaît pas dans la grille de données, je suppose que la demande aux services RIA n'est pas terminée avant que je l'ai lié à la grille de données. Je pourrais utiliser l'événement LoadOperation <>() Terminé. Mais cela ne fonctionne qu'avec des entités définies, alors comment puis-je faire cela? Pour référence ici est le dernier message: LINQ query null reference exception Voici la requête:La grille de données Silverlight n'affiche aucune donnée avec les services RIA de requête anonyme

var bPermisos = from b in ruc.Permisos 
           where b.IdUsuario == SelCu.Id 
           select new { 
            Id=b.Id, 
            IdUsuario=b.IdUsuario, 
            IdPerfil=b.IdPerfil, 
            Estatus=b.Estatus, 
            Perfil=b.Cat_Perfil.Nombre, 
            Sis=b.Cat_Perfil.Cat_Sistema.Nombre 

           }; 

Je suis un débutant tout à fait désolé si est une question très simple.

Merci!

Répondre

0

Silverlight 3 ne prend pas en charge la liaison de données aux types anonymes.

Vous devez créer une classe simple dans laquelle placer vos propriétés.

Voici la technique ValueConverter:

namespace SilverlightApplication55 
{ 
    using System; 
    using System.Windows; 
    using System.Windows.Data; 

    public class NamedPropertyConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null || parameter == null) 
     { 
      return null; 
     } 

     var propertyName = parameter.ToString(); 

     var property = value.GetType().GetProperty(propertyName); 

     if (property == null) 
     { 
      return null; 
     } 

     return property.GetValue(value, null); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue;   
    } 
} 
} 

Ensuite, vous mettez dans vos UserControl.Resources:

<local:NamedPropertyConverter x:Key="NamedPropertyConverter"/> 

Et ce où vous voulez utiliser un paramètre nommé - passer dans la ConverterParameter:

<TextBlock Text="{Binding Converter={StaticResource NamedPropertyConverter}, ConverterParameter=Estatus}"/> 
+0

dans le DomainService ou dans le même xaml.cs? Et dois-je créer chaque classe pour chaque requête anonyme dont j'ai besoin? – user289082

+0

vous avez seulement besoin de créer des classes pour les objets que vous devez lier. Vous pouvez également le faire avec un ValueConverter et un ConverterParamter pour extraire la valeur de la propriété par réflexion. –

+0

= S Je ne sais rien sur la réflexion pourriez-vous écrire un extrait car je peux le comprendre mieux plz? Je vous remercie! – user289082