/// <summary>
        /// Starts a new task for the autocomplete and propagates the result via the <see cref="AutocompleteItemsChanged" /> event.
        /// This method does some technical stuff and delegates the actual search to the <see cref="IAutocompleteSource" />.
        /// </summary>
        /// <param name="searchTerm">The term to search for</param>
        public void Search(string searchTerm)
        {
            string id = Guid.NewGuid().ToString();

            IAutocompleteSource autocompleteSource = null;

            lock (m_lockObject)
            {
                autocompleteSource = m_autocompleteSource;

                // no source, no search
                if (autocompleteSource == null)
                {
                    return;
                }

                LastId = id;
            }

            Task.Delay(SearchDelay)
            .ContinueWith((prevTask) =>
            {
                // search only if there was no other request during the delay
                if (DoSearchWithId(id))
                {
                    IEnumerable items = autocompleteSource.Search(searchTerm);

                    // a final check if this result will not be replaced by another active search
                    if (DoSearchWithId(id))
                    {
                        AutocompleteItemsChanged?.Invoke(this, new AutocompleteItemsChangedEventArgs(items));
                    }
                }
            });
        }
        public AutocompleteViewModel()
            : base()
        {
            m_autocompleteSource = new OperatingSystemAutocompleteSource();

            m_selectedItem = null;
        }
 private void AutocompleteSourceChangedHandler(IAutocompleteSource newAutocompleteSource)
 {
     if (m_autocompleteController != null)
     {
         m_autocompleteController.AutocompleteSource = newAutocompleteSource;
     }
 }
Example #4
0
        private void AutocompleteSourceChangedHandler(IAutocompleteSource newAutocompleteSource, IAutocompleteSource oldAutocompleteSource)
        {
            if (oldAutocompleteSource != null && oldAutocompleteSource is IAutocompleteSourceChangingItems)
            {
                ((IAutocompleteSourceChangingItems)oldAutocompleteSource).AutocompleteSourceItemsChanged -= AutocompleteSourceItemsChangedHandler;
            }

            if (newAutocompleteSource != null && newAutocompleteSource is IAutocompleteSourceChangingItems)
            {
                ((IAutocompleteSourceChangingItems)newAutocompleteSource).AutocompleteSourceItemsChanged += AutocompleteSourceItemsChangedHandler;
            }

            if (m_autocompleteController != null)
            {
                m_autocompleteController.AutocompleteSource = newAutocompleteSource;
            }
        }
Example #5
0
        internal CatalogView(
            MoviesGridViewModel data,
            IAutocompleteSource directorsAutocompleteSource,
            IAutocompleteSource actorsAutocompleteSource)
        {
            InitializeComponent();

            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

            var imageColumn = new DataGridViewImageColumn();
            var nameColumn  = new DataGridViewTextBoxColumn();
            var yearColumn  = new DataGridViewTextBoxColumn();

            imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom;

            dataGridView1.Columns.Add(imageColumn);
            dataGridView1.Columns.Add(nameColumn);
            dataGridView1.Columns.Add(yearColumn);



            imageColumn.Resizable = DataGridViewTriState.False;
            nameColumn.Resizable  = DataGridViewTriState.False;
            yearColumn.Resizable  = DataGridViewTriState.False;

            imageColumn.ReadOnly = true;
            nameColumn.ReadOnly  = true;
            yearColumn.ReadOnly  = true;

            editFormYear.SetErrorProvider(editMovieFormErrorProvider);
            editFormNameText.SetErrorProvider(editMovieFormErrorProvider);
            editFormCountryText.SetErrorProvider(editMovieFormErrorProvider);

            editFormDirector.SetSource(directorsAutocompleteSource);
            editFormAddActor.SetSource(actorsAutocompleteSource);

            editMovieFormHelpProvider.SetShowHelp(editFormNameText, true);
            editMovieFormHelpProvider.SetHelpString(editFormNameText, "Название фильма");

            data.Changed += UpdateGridView;
            UpdateGridView(data);
            ShowMovieGrid();

            OnCatalogViewResize(null, null);
        }
        /// <summary>
        /// Creates a new <see cref="AutocompleteController" />.
        /// </summary>
        public AutocompleteController()
        {
            m_autocompleteSource = null;

            m_lastId = null;
        }
 public ThemChuyenXuViewModel()
     : base()
 {
     _giaodanSource   = new GiaoDanAutoCompleteSource();
     _selectedGiaoDan = null;
 }
Example #8
0
 public void SetSource(IAutocompleteSource src)
 {
     source = src;
 }