Ejemplo n.º 1
0
        public EventsViewModel()
        {
            Title            = "Event";
            Items            = new ObservableCollection <Event>();
            LoadItemsCommand = new Command(async() => await ExecuteLoadItemsCommand());

            MessagingCenter.Subscribe <NewEventPage, Event>(this, "AddEvent", async(obj, item) =>
            {
                var _item = item as Event;
                Items.Add(_item);
                await EventDataStore.SaveItemAsync(_item);
            });

            MessagingCenter.Subscribe <EventsPage, Event>(this, "DeleteEvent", async(obj, item) =>
            {
                try
                {
                    var _item   = item as Event;
                    var itemObj = Items.AsEnumerable().ToList().Where(x => x.Id == _item.Id).FirstOrDefault();
                    Items.Remove(itemObj);
                    EventDataStore.DeleteItemAsync(_item.Id);
                }
                catch (Exception ex)
                {
                }
            });

            MessagingCenter.Subscribe <EditEventPage, Event>(this, "EditEvent", async(obj, item) =>
            {
                try
                {
                    var _item           = item as Event;
                    var itemObj         = Items.Where(x => x.Id.Equals(item.Id)).FirstOrDefault();
                    itemObj.Name        = _item.Name;
                    itemObj.Description = _item.Description;
                    itemObj.IsRepeat    = _item.IsRepeat;
                    itemObj.UpdatedDate = _item.UpdatedDate;

                    await EventDataStore.SaveItemAsync(_item);
                }
                catch (Exception ex)
                {
                }
            });
        }
        async Task ExecuteLoadItemsCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                Items.Clear();
                var items = await EventDataStore.GetItemsAsync();

                foreach (var item in items)
                {
                    if (item.RepeatTypeId == (int)RepeatTypeEnum.Monthly && item.EventDate.Day == DateTime.Now.Day)
                    {   //Monthly -> day
                        Items.Add(item);
                    }
                    else if (item.RepeatTypeId == (int)RepeatTypeEnum.Annual && item.EventDate.Day == DateTime.Now.Day && item.EventDate.Day == DateTime.Now.Day)
                    {   //Annual -> day & month
                        Items.Add(item);
                    }
                    else if (item.RepeatTypeId == (int)RepeatTypeEnum.NoRepeat && item.EventDate < DateTime.Now)
                    {   //no repeat then delete entries < eventdate
                        EventDataStore.DeleteItemAsync(item.Id);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }