private void _OnSignalREvent(string aEventName, object aEventData) { switch (aEventName) { case "ProductListCreated": { var lEventData = (JObject)aEventData; var lList = new ProductListDTO() { Id = (int)lEventData["Id"], Name = (string)lEventData["Name"] }; lock (this.ProductLists) mProductLists.Add(lList); _NotifyPropertyChanged("ProductLists"); } break; case "ProductListDeleted": { var lEventData = (JObject)aEventData; var lList = mProductLists.FirstOrDefault(aList => aList.Id == (int)lEventData["Id"]); if (lList != null) { lock (this.ProductLists) mProductLists.Remove(lList); _NotifyPropertyChanged("ProductLists"); } } break; case "ProductEntryCreated": { var lEventData = (JObject)aEventData; var lList = mProductLists.FirstOrDefault(aList => aList.Id == (int)lEventData["ListId"]); if (lList != null) { var lEntry = new ProductEntryDTO() { Id = (int)lEventData["Id"], ProductName = (string)lEventData["Name"], Amount = (int)lEventData["Amount"], Comments = (string)lEventData["Comments"], OwnerList = lList }; lEntry.PropertyChanged += _OnProductEntryPropertyChanged; lock (lList.mProductEntries) lList.mProductEntries.Add(lEntry); lList._NotifyPropertyChanged("ProductEntries"); } } break; case "ProductEntryEdited": { var lEventData = (JObject)aEventData; var lList = mProductLists.FirstOrDefault(aList => aList.Id == (int)lEventData["ListId"]); if (lList != null) { var lEntry = lList.ProductEntries.FirstOrDefault(aEntry => aEntry.Id == (int)lEventData["Id"]); if (lEntry != null) { lEntry.Amount = (int)lEventData["Amount"]; lEntry.Comments = (string)lEventData["Comments"]; } } } break; case "ProductEntryDeleted": { var lEventData = (JObject)aEventData; var lList = mProductLists.FirstOrDefault(aList => aList.Id == (int)lEventData["ListId"]); if (lList != null) { var lEntry = lList.ProductEntries.FirstOrDefault(aEntry => aEntry.Id == (int)lEventData["Id"]); if (lEntry != null) { lock (lList.mProductEntries) lList.mProductEntries.Remove(lEntry); lList._NotifyPropertyChanged("ProductEntries"); } } } break; } }
public async Task QueryProductEntries(ProductListDTO aList) { using (this.SetBusy()) { var lResponse = await mJSONRequester.Get(this.ServerURL, string.Format(APIConstants.URL_PRODUCT_ENTRIES, aList.Id), mRequestHeaders); lResponse.EnsureSuccessStatusCode(); List<ProductEntryDTO> lProductEntries = await lResponse.Content.ReadAsAsync<List<ProductEntryDTO>>(); //Unsuscribe from previous event listeners foreach (var lProductEntry in aList.ProductEntries) { lProductEntry.PropertyChanged -= _OnProductEntryPropertyChanged; lProductEntry.OwnerList = null; } //Suscribe to new product entries foreach (var lProductEntry in lProductEntries) { lProductEntry.PropertyChanged += _OnProductEntryPropertyChanged; lProductEntry.OwnerList = aList; } lock (aList.mProductEntries) { aList.mProductEntries.Clear(); foreach (var lProductEntry in lProductEntries) aList.mProductEntries.Add(lProductEntry); } aList._NotifyPropertyChanged("ProductEntries"); } }