来自另一个表的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();
}
还有别的办法吗?
您需要返回产品名称作为原始查询的一部分。
如果你正在使用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中直接绑定它。