Значение столбца таблицы данных Silverlight из другой таблицы - PullRequest
0 голосов
/ 27 октября 2011

В моем проекте silverlight есть окно поиска specialprice, привязанное к таблице specialprice У меня есть код продукта и цена в этой таблице. Я хочу отобразить название продукта для каждого кода в сетке данных. Названия продуктов, соответствующие коду, находятся в другой таблице с именем 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 ]

1 голос
/ 27 октября 2011

Вам необходимо вернуть название продукта как часть исходного запроса.

Если вы используете 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" ... />
0 голосов
/ 27 октября 2011

Если вы используете EF + WCF RIA, вы можете [Include] это свойство Name, а в xaml просто связать его напрямую.

0 голосов
/ 27 октября 2011

Поместите ваш код асинхронного выполнения в получатель нового свойства и затем используйте

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

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

Таким образом, ваша привязка будет вызывать получатель асинхронно самостоятельно и отображать значение соответственно как n, когда оно станет доступным.

Убедитесь, что вы не вызываете запрос, выполненный в получателе, так как это сделает его асинхронным.Получатель имеет для синхронности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...