来自另一个表的Silverlight datagrid列值

时间:2011-10-27 09:50:43

标签: c# wpf silverlight

我的silverlight项目中有一个特殊价格查找窗口,该窗口绑定到特价价格表。我在该表中有产品代码和价格。我想显示datagrid中每个代码的产品名称。与代码对应的产品名称位于另一个名为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();
   }

我能解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

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

如果你使用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;

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

然后在您的网格中,您可以简单地拥有一个与产品名称绑定的列,如下所示:

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

答案 1 :(得分:0)

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

       Myvalue="{Binding IsAsync=true, MyViewModelProperty}"

       public string MyViewModelProperty {
            get {
                ////your converter code in synchronous pattern.
            }
       }

因此,您的绑定将在其自身上异步调用getter,并在可用时将其显示为n。

确保调用在getter中完成的查询,因为这会使其异步。 getter 具有同步。

答案 2 :(得分:0)

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