private async Task SaveItemAsync()
        {
            Notification     result      = Notification.Success();
            ModelUpdateEvent updateEvent = _isNewModel ? ModelUpdateEvent.Created : ModelUpdateEvent.Updated;

            result = _validator.ValidateModel(Model);

            if (result.IsValid())
            {
                var saveResult = await _repository.SaveSampleItemAsync(Model, updateEvent);

                result.AddRange(saveResult);
            }

            if (result.IsValid())
            {
                var eventMessenger = CC.IoC.Resolve <IEventAggregator>();
                ModelUpdatedMessageResult <SampleItem> eventResult = new ModelUpdatedMessageResult <SampleItem>()
                {
                    UpdatedModel = Model, UpdateEvent = updateEvent
                };
                eventMessenger.GetEvent <ModelUpdatedMessageEvent <SampleItem> >().Publish(eventResult);
                await Close();
            }
            else
            {
                await UserNotifier.ShowMessageAsync(result.ToString(), "Save Failed");
            }
        }
        public override async Task InitializeAsync(System.Collections.Generic.Dictionary <string, string> args)
        {
            if (args != null && args.ContainsKey(Constants.Parameters.Id))
            {
                string id          = args[Constants.Parameters.Id];
                var    fetchResult = await _repository.FetchSampleItemAsync(id);

                if (fetchResult.IsValid())
                {
                    Model = fetchResult.Model;
                }
                else
                {
                    await UserNotifier.ShowMessageAsync(fetchResult.Notification.ToString(), "Fetch Error");
                }
            }
            else
            { //assume new model required
                Model = new SampleItem()
                {
                    Id = Guid.NewGuid().ToString()
                };
                _isNewModel = true;
            }
        }
        public override async Task InitializeAsync(System.Collections.Generic.Dictionary <string, string> args)
        {
            if (args != null && args.ContainsKey(Constants.Parameters.Id))
            {
                string id          = args[Constants.Parameters.Id];
                var    fetchResult = await _repository.FetchContactAsync(id);

                if (fetchResult.IsValid())
                {
                    Model = fetchResult.Model;
                }
                else
                {
                    await UserNotifier.ShowMessageAsync(fetchResult.Notification.ToString(), "Fetch Error");
                }
            }
            else
            { //assume new model required
                Model = new Contact()
                {
                    Id = Guid.NewGuid().ToString(),
                    //design data
                    PictureName         = "manhattan",
                    Name                = "Dr. Manhattan",
                    Notes               = "Stay on this guy's good side :P",
                    NextAppointmentDate = DateTime.Now.AddDays(2)
                };
                _isNewModel = true;
            }
        }
        public override async Task InitializeAsync(Dictionary <string, string> args)
        {
            if (args != null && args.ContainsKey(Constants.Parameters.Id))
            {
                string id          = args[Constants.Parameters.Id];
                var    fetchResult = await _repository.FetchAppointmentAsync(id);

                if (fetchResult.IsValid())
                {
                    Model = fetchResult.Model;

                    if (Model != null)
                    {
                        var providerResult = await _repository.FetchProvidersAsync(Model.ProviderId);

                        if (providerResult.IsValid() && providerResult.ModelCollection.Count > 0)
                        {
                            Provider = providerResult.ModelCollection.First();
                        }
                    }
                }
                else
                {
                    await UserNotifier.ShowMessageAsync(fetchResult.Notification.ToString(), "Fetch Error");
                }
            }
            else
            { //assume new model required
                Model = new Appointment()
                {
                    Id = Guid.NewGuid().ToString()
                };
                _isNewModel = true;

                if (args != null && args.ContainsKey(Constants.Parameters.ProviderId))
                {
                    await FetchProviderAsync(args[Constants.Parameters.ProviderId]);
                }
            }
        }