void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
        {
            var id = navigationContext.Parameters["id"];

            if (!string.IsNullOrEmpty(id))
            {
                var fileset = _filesetService.Filesets.FirstOrDefault(fs => fs.Id.ToString() == id);

                if (fileset != null)
                {
                    Fileset = new FilesetViewModel(fileset);
                    ActivityLog = _activityLogService.GetEvents(fileset.Id);
                }

                _filesetService.Filesets.Select(fs => fs.Category)
                    .Distinct()
                    .Where(c => !string.IsNullOrEmpty(c))
                    .ForEach(_categories.Add);
            }
        }
        private void ExecuteRemoveFileset(FilesetViewModel model)
        {
            var fs = _filesetService.Filesets.FirstOrDefault(f => f.Id == model.Id);

            if (fs != null)
            {
                _filesetService
                    .Remove(fs)
                    .ContinueWith(task =>
                    {
                        Trace.WriteLineIf(task.IsFaulted, task.Exception);
                    });
            }
        }
        private void ExecuteExportFileset(FilesetViewModel fileset)
        {
            var dialog = new SaveFileDialog();
            dialog.Title = "Select location to export the fileset";
            dialog.FileName = fileset.Id + ".fis";

            if (dialog.ShowDialog() == true)
            {
                var fs = _filesetService.Filesets.FirstOrDefault(fvm => fvm.Id == fileset.Id);

                if (fs != null)
                {
                    _filesetService
                        .Save(fs, () => new FileStream(dialog.FileName, FileMode.Create))
                        .ContinueWith(task =>
                        {
                            Trace.WriteLineIf(task.IsFaulted, task);
                        });
                }
            }
        }
 private bool CanExecuteRemoveFileset(FilesetViewModel model)
 {
     return model != null;
 }
 private bool CanExecuteExportFileset(FilesetViewModel fileset)
 {
     return fileset != null;
 }
        void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
        {
            _navigationService = navigationContext.NavigationService;

            foreach (var fileset in _filesetService.Filesets)
            {
                var viewModel = new FilesetViewModel(fileset);
                viewModel.PropertyChanged += OnFilesetPropertyChanged;
                _filesets.Add(viewModel);
            }

            _filesetAdded = _filesetService
                .FilesetAdded
                .ObserveOnDispatcher()
                .Subscribe(fileset =>
                {
                    var viewModel = new FilesetViewModel(fileset);
                    viewModel.PropertyChanged += OnFilesetPropertyChanged;
                    _filesets.Add(viewModel);
                    Filesets.MoveCurrentTo(viewModel);
                });

            _filesetRemoved = _filesetService
                .FilesetRemoved
                .ObserveOnDispatcher()
                .Subscribe(fileset =>
                {
                    var fs = _filesets.FirstOrDefault(fvm => fvm.Id == fileset.Id);

                    if (fs != null)
                    {
                        fs.PropertyChanged -= OnFilesetPropertyChanged;
                        _filesets.Remove(fs);
                    }

                    if (Filesets.IsEmpty)
                    {
                        _navigationService.Region.RegionManager.Regions[AppRegions.MainRegion]
                            .RequestNavigate(typeof(IWelcomeView).Name);
                    }
                });

            Filesets = CollectionViewSource.GetDefaultView(_filesets);
            Filesets.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
            Filesets.SortDescriptions.Add(new SortDescription("Category", ListSortDirection.Ascending));
            Filesets.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
            Filesets.CurrentChanged += CurrentFilesetChanged;
            Filesets.MoveCurrentTo(null);
            Filesets.MoveCurrentToFirst();
        }