2010-03-10 52 views
0

我有一个匿名的linq查询,我绑定到一个数据网格,当我调试它带来好的数据,但它不显示在数据网格中,我怀疑在将其绑定到数据网格之前,对RIA服务的请求未完成。我可以使用LoadOperation <>()完成的事件。但它只适用于定义实体,所以我该怎么做? 仅供参考这里的最后一个职位: LINQ query null reference exception 下面是该查询:Silverlight的DataGrid不显示任何数据与匿名查询RIA服务

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 

           }; 

我是一个完全新手,对不起,如果是一个很简单的问题。

谢谢!

回答

0

Silverlight 3不支持数据绑定到匿名类型。

您需要创建一个简单的类来放置您的属性。

这里是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;   
    } 
} 
} 

然后你把这个在您的UserControl.Resources:

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

这要使用命名参数 - 与传递ConverterParameter:

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

在DomainService中还是在同一个xaml.cs中?我是否必须为每个需要的匿名查询创建每个类? – user289082 2010-03-10 15:59:38

+0

您只需要为需要绑定的对象创建类。您也可以使用ValueConverter和ConverterParamter通过反射来提取属性值。 – 2010-03-10 19:41:56

+0

= S我对反射一无所知可以写一个片段,因为我可以更好地理解它。谢谢! – user289082 2010-03-11 15:56:46