在Silverlight中仅检索具有MVVM指示灯的一个项目

时间:2010-08-02 14:10:27

标签: silverlight mvvm-light

从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(查询)'方法?

谢谢,

Ueli

1 个答案:

答案 0 :(得分:0)

这是一件非常简单的事情。您只需在应用程序中使用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()代替。

如果这还不足以让你离开,请告诉我,我可以进一步解释。

相关问题