绑定到导航属性

时间:2013-11-16 19:25:35

标签: silverlight silverlight-5.0

我在Binding列上使用DataGrid,并在过去使用了Navigation Properties预期结果。我正在使用其他字段来显示使用Navigation Properties的这两个字段。对于它们所代表的字段,属性拼写正确。我通过Entity Framework使用WCF作为后端。当我检查通过WCF函数返回的CalenderChange对象时,我可以看到Navigation Propertyreadonly字段是_Firstname并且具有我期望的值。我尝试将绑定更改为Binding="{Binding Personnel._Firstname}但没有成功。

将其包含在查询中:

db.CalenderChanges.Include("Personnel").Where({condition}).ToList()

XAML:

<sdk:DataGridTextColumn Header="First Name" Binding="{Binding Personnel.Firstname}"  Width="100" />
<sdk:DataGridTextColumn Header="Last Name" Binding="{Binding Personnel.Lastname}"  Width="100" />

我错过了什么?感谢...

1 个答案:

答案 0 :(得分:2)

如果您使用的是WCF Ria服务,通常的原因是因为使用Include(“人员”)是不够的。

要使Silverlight获取人员数据,您需要两个条件

  1. db.CalenderChanges.Include("Personnel")以便从数据库

  2. 返回Personnel
  3. Personnel导航属性的元数据标有[Include]属性,因此人员由WCF编组到客户端。见https://stackoverflow.com/a/5332188/34461

  4. 样品

    // ExtraMetadata.cs
    // Add Reference to System.ComponentModel.DataAnnotations.dll
    
    namespace MyModel
    {
      using System.ComponentModel.DataAnnotations;
    
      // This attribute tells Ria Services that the metadata
      // for the CalendarChange class is in CalenderChange.MetaData class
      [MetadataType(typeof(CalenderChange.MetaData)]
      public partial class CalenderChange {
        public class MetaData {
    
            // adding this attribute tells RIA services 
            // to also send this property across the wire
            [Include]
            public MetaData Personnel { get; set; }
        }
      }
    }
    

    参考:

    1. MSDN How to add metadata classes.

    2. MSDN IncludeAttribute