2010-08-02 14 views
0

MVVM光要抓住從WCF數據服務的一些內容到我的視圖模型是直截了當:檢索只有一個項目在Silverlight中

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(query)'方法?

謝謝

Ueli

回答

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。查詢是服務器上的特定版本 - 你也可以只contruct查詢客戶端有:

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

異步調用後,thows從異步調用時出現任何錯誤,然後返回的唯一實體回。如果您獲得多個實體,則可以使用.First()代替。

如果這不足以讓你去,讓我知道,我可以進一步解釋。

+0

嗨瑞安,謝謝你的回答。我堅持以下幾點:我的上下文中沒有「加載」方法。此外,我不太清楚在你的例子中,上下文會知道我剛剛下載的內容(能夠使用'BeginSaveChanges'方法保存更改)。我錯過了什麼嗎?謝謝,Ueli – 2010-08-04 18:56:45

+0

對不起,我以爲你會使用RIA服務。也許你直接使用WCF服務?如果是這樣,請發佈代碼以顯示您在代碼中創建查詢對象的位置,如第二個對象中所述。這必須發生在連接對象上。 DataServiceCollection只是一個集合。它不是連接對象。 – 2010-08-04 19:28:25

相關問題