来自另一个表的Silverlight数据网格列值

本文关键字:数据网 网格 数据 Silverlight 另一个 | 更新日期: 2023-09-27 18:12:28

我在我的silverlight项目中有一个特殊价格查找窗口,它绑定到一个特殊价格表。我在那张表中有产品代码和价格。我想显示数据网格中每个代码的产品名称。与代码对应的产品名位于另一个名为products的表中。我尝试使用IValueConverter。因为Linq查询是异步执行的,所以我不能返回值

 string ProductName = "";
   public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
   {
       string ProdCode = value.ToString();
       var GetProdNamesQuery = GV.dbContext.Load(GV.dbContext.GetProdNamesQuery(ProdCode));
       GetProdNamesQuery.Completed += new EventHandler(GetProdNamesQuery_Completed);
       return ProductName;
   }
   void GetProdNamesQuery_Completed(object sender, EventArgs e)
   {
   }
   public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
   {
       throw new NotImplementedException();
   }

还有别的办法吗?

来自另一个表的Silverlight数据网格列值

您需要返回产品名称作为原始查询的一部分。

如果你正在使用Linq to SQL(你的问题不清楚),在你的数据源中,你需要这样的东西:

DataLoadOptions options = new DataLoadOptions();
options.LoadWith<SpecialPrice>(p => p.Product);
this.DataContext.LoadOptions = options;
var query = from specialPrice in DataContext.SpecialPrices
            select party;
return query;

这将通过您的SpecialPrice类的Product字段返回产品信息,只要您用[Include]属性标记属性。

然后在你的网格中,你可以简单地有一个绑定到产品名称的列,像这样:

<grid:TextColumn Key="Product.ProductName" ... />

将异步执行的代码放在新属性的getter中,然后使用

       Myvalue="{Binding IsAsync=true, MyViewModelProperty}"
       public string MyViewModelProperty {
            get {
                ////your converter code in synchronous pattern.
            }
       }

所以你的绑定会自己异步调用getter,并在它可用时显示相应的值为n。

确保调用getter中完成的查询,因为这会使其异步。getter 必须是同步的

如果您使用EF + WCF RIA,您可以[Include]名称属性,并在xaml中直接绑定它。