Получить только один элемент с MVVM свет в Silverlight - PullRequest
0 голосов
/ 02 августа 2010

Чтобы получить некоторую информацию из службы данных WCF в мою модель представления, достаточно просто:

public const string RequestsPropertyName = "Requests";
private DataServiceCollection<Request> _requests = null;
public DataServiceCollection<Request> Requests
{
  get { return _requests; }

  set
  {
    if (_requests == value) { return; }

    var oldValue = _requests;
    _requests = value;

    RaisePropertyChanged(RequestsPropertyName, oldValue, value, true);
  }
}

, а затем

Requests.LoadAsync(query);

Но что, если у меня есть свойство, которое не является коллекцией?

public const string RequestDetailsPropertyName = "RequestDetails";
private Request _requestDetails = null;
public Request RequestDetails
{
  get { return _requestDetails; }

и так далее. Откуда я могу получить метод LoadAsync (запрос)?

Спасибо,

Ули

1 Ответ

0 голосов
/ 04 августа 2010

Это довольно простая вещь.Вам просто нужно использовать DomainContext в вашем приложении.Здесь вы создаете свой запрос, а затем применяете результат к своей собственности.

Вот пример того, как это может выглядеть в вашем коде:

    void LoadRequest(int requstID)
    {
        var query = workContext.GetRequestByIDQuery(requestID);
        workContext.Load(query, lo =>
        {
            DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        if (lo.HasError)
                            throw lo.Error;
                        else
                            RequestDetails = lo.Entities.Single();
                    });
        }, null);
    }

В этом примереобъект workContext является DomainContext.Запрос является определенной версией на сервере - вы также можете просто создать клиентскую часть запроса с помощью:

.Where(r => r.RequestID == requestID)  

После асинхронного вызова он отбрасывает все ошибки, возникшие в результате асинхронного вызова, а затем возвращаетвернулась только сущность.Если вы получаете более 1 объекта, вы можете вместо этого использовать .First ().

Если этого недостаточно, чтобы начать работу, дайте мне знать, и я могу объяснить подробнее.

...