【问题标题】:Silverlight datagrid don't show any data with anonymous query RIA servicesSilverlight 数据网格不显示任何具有匿名查询 RIA 服务的数据
【发布时间】:2010-03-10 15:01:13
【问题描述】:

我有一个绑定到数据网格的匿名 linq 查询,当我调试它时,它会带来正确的数据,但它没有显示在数据网格中,我怀疑在绑定它之前对 RIA 服务的请求没有完成到数据网格。我可以使用 LoadOperation() Completed 事件。但它只适用于定义的实体,所以我该怎么做呢? 最后一篇文章供参考: LINQ query null reference exception 这是查询:

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

                                 };

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

谢谢!!

【问题讨论】:

    标签: silverlight service ria anonymous


    【解决方案1】:

    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}"/>
    

    【讨论】:

    • 在 DomainService 中还是在同一个 xaml.cs 中?我是否必须为我需要的每个匿名查询创建每个类?
    • 您只需要为需要绑定的对象创建类。您也可以使用 ValueConverter 和 ConverterParamter 来通过反射提取属性值。
    • =S 我对反射一无所知,你能写一个sn-p,因为我能更好地理解它吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多