void SearchFinished(AsyncOperationInstance<IList<ISerializableObject>> operation, IList<ISerializableObject> result)
        {
            List<IISOViewModel> selectionList = buildQueryResult(result);
            DispatcherHelper.CheckBeginInvokeOnUI(
                () =>
                {
                    _queryResult = selectionList;

                    QueryResultTree = new AsyncTreeViewModel(ISOStore);

                    RaiseQueryResultChanged();

                    CurrentOperation = null;
                });
        }
        public SelectionViewModel()
            : base("Selection_Next", "Selection_Previous", "Selection_Title","")
        {
            PreviousPage = Messages.Page.FieldData;
            NextPage = Messages.Page.Actions;
            CanNavigateNext = false;
            CanNavigateBack = false;

            MessengerInstance.Register<Selection>(this, (msg) =>
            {
                CanNavigateNext = false;
                CanNavigateBack = false;
                BuildingSelection = false;
                BuildStatus = "Selection_WaitingForTree";
                SelectionTree = new AsyncTreeViewModel(ISOStore);
                SelectionTree.TruncateDataItems = msg.TruncateDataItems;
                foreach (var vm in msg.Content)
                {
                    SelectionTree.addGenerator(vm);
                }

                SelectionTree.SelectionBuildProgressChanged += new SelectionBuildProgressChangedHandler(SelectionTree_SelectionBuildProgressChanged);

                new Action(() =>
                    {
                        _completeSelection = SelectionTree.buildSelection();
                        DispatcherHelper.CheckBeginInvokeOnUI(()=>
                            {
                                SelectionTree.SelectionBuildProgressChanged -= SelectionTree_SelectionBuildProgressChanged;
                                CanNavigateBack = true;
                                CanNavigateNext = true;
                                BuildingSelection = false;
                                BuildStatus = "Selection_Done";
                            });
                    }).BeginInvoke(null, null);
            });
        }
        /// <summary>
        /// Initializes a new instance of the SelectFieldDataViewModel class.
        /// </summary>
        public SelectFieldDataViewModel()
            : base("SelectFD_Next","SelectFD_Previous","SelectFD_Title","SelectFD_Description")
        {
            NextPage = Messages.Page.FinalSelection;
            PreviousPage = Messages.Page.Actions;

            CanNavigateBack = true;
            CanNavigateNext = true;

            QueryDatabase = new RelayCommand(executeSearch,
                () => ConfiguredSearch != null);

            AddToSelection = new RelayCommand<IList>((selection) =>
            {
                if(SelectionTree == null)
                    SelectionTree = new AsyncTreeViewModel(ISOStore);

                if (_queryResult != null && selection != null)
                {
                    var typedSelection = Enumerable.Cast<IISOViewModel>(selection);

                    foreach (var generator in typedSelection)
                    {
                        if (!_selection.Contains(generator))
                            _selection.Add(generator);
                    }
                    if (typedSelection.Count() > 0)
                    {
                        RaiseSelectionChanged();
                    }
                }

            });

            RemoveFromSelection = new RelayCommand<IList>((selection) =>
                {
                    if(_queryResult != null && selection != null)
                    {
                        var typedSelection = Enumerable.Cast<IISOViewModel>(selection);

                        foreach (var generator in typedSelection)
                        {
                            _selection.Remove(generator);
                        }
                        if (selection.Count > 0)
                        {
                            RaiseSelectionChanged();
                        }
                    }
                });
            MessengerInstance.Register<ConnectionStateChanged>(this, (msg) =>
                {
                    //Repository Disconnected
                    if ((msg.Content & ConnectionState.ConnectedToRepository) != ConnectionState.ConnectedToRepository)
                        clearSelection();
                });

            MessengerInstance.Register<Settings>(this, (msg) => updateFromSettings(msg.Content));
            MessengerInstance.Send<SettingsRequest>(new SettingsRequest());
        }