Динамическое раскрывающееся список Combobox [дубликат]

Вы можете использовать сеансы для хранения значений и писать правила, чтобы пополнить поля формы после проверки на отправке данных. Также функция isset () очень полезна, чтобы избежать «неопределенных» ошибок.

2
задан BabyDoll 20 December 2015 в 16:17
поделиться

2 ответа

Я разработал образец приложения. Я использовал строку как запись, вы можете сделать это, используя свою собственную сущность. Backspace также работает правильно.

 public class FilterViewModel
    {
        public IEnumerable<string> DataSource { get; set; }       

        public FilterViewModel()
        {
            DataSource = new[] { "india", "usa", "uk", "indonesia" };           
        }
    }

public partial class WinFilter : Window
    {
          public WinFilter()
          {
             InitializeComponent();

             FilterViewModel vm = new FilterViewModel();
             this.DataContext = vm;
          }

          private void Cmb_KeyUp(object sender, KeyEventArgs e)
          {
              CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(Cmb.ItemsSource);

              itemsViewOriginal.Filter = ((o) =>
              {
                  if (String.IsNullOrEmpty(Cmb.Text)) return true;
                  else
                  {
                     if (((string)o).Contains(Cmb.Text)) return true;
                     else return false;
                  }
              });

             itemsViewOriginal.Refresh();

             // if datasource is a DataView, then apply RowFilter as below and replace above logic with below one
             /* 
              DataView view = (DataView) Cmb.ItemsSource; 
              view.RowFilter = ("Name like '*" + Cmb.Text + "*'"); 
             */
          }
     }

XAML

<ComboBox x:Name="Cmb" IsTextSearchEnabled="False" IsEditable="True" ItemsSource="{Binding DataSource}" Width="120"  IsDropDownOpen="True" StaysOpenOnEdit="True" KeyUp="Cmb_KeyUp" />

13
ответ дан AnjumSKhan 15 August 2018 в 22:36
поделиться
  • 1
    В обоих ответах я все еще получаю сообщение «System.NotSupportedException». Я даже попробовал создать настраиваемый элемент управления, наследующий из поля со списком, и все те же ошибки. Может быть, есть сторонний инструмент, который каждый может порекомендовать? Это сводит меня с ума! – BabyDoll 4 January 2016 в 11:55
  • 2
    @BabyDoll u должен делать что-то глупое. Вы можете загрузить свой код на сайте dropbox.com и поделиться ссылкой. – AnjumSKhan 4 January 2016 в 15:04
  • 3
    Я тоже так думаю!! Возможно, стоит упомянуть, что я привязываюсь непосредственно от данных? Общий новичок в WPF, поэтому я уверен, что есть что-то глупое, что мне не хватает. Я где-то читал, что datatables не поддерживают фильтрацию (как я это делаю), но не потому, что я должен использовать ICollectionView в первую очередь? – BabyDoll 4 January 2016 в 15:12
  • 4
    @BabyDoll, что вы получаете в 'itemsView Original` CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(Cmb.ItemsSource); – AnjumSKhan 4 January 2016 в 17:11
  • 5
    Когда я отлаживаю, я вижу содержимое данных с правильными данными. Что-то мне пришло в голову; Я пытаюсь фильтровать данные, но я не указываю, какой столбец использовать .... это моя проблема ?? И если да, как указать, какой столбец использовать для фильтрации? – BabyDoll 4 January 2016 в 17:37

Я думаю, что CollectionView - это то, что вы ищете.

  public ObservableCollection<NdfClassViewModel> Classes
  {
      get { return _classes; }
  }

  public ICollectionView ClassesCollectionView
  {
      get
      {
          if (_classesCollectionView == null)
          {
              BuildClassesCollectionView();
          }
           return _classesCollectionView;
      }
  }

  private void BuildClassesCollectionView()
  {
      _classesCollectionView = CollectionViewSource.GetDefaultView(Classes);
      _classesCollectionView.Filter = FilterClasses;

      OnPropertyChanged(() => ClassesCollectionView);
  }

  public bool FilterClasses(object o)
  {
      var clas = o as NdfClassViewModel;



      // return true if object should be in list with applied filter, return flase if not
  }

Вы хотите использовать «ClassesCollectionView» в качестве вашего ItemsSource для вашего Combobox

0
ответ дан Ian 15 August 2018 в 22:36
поделиться
  • 1
    Спасибо за ответ! Но я все еще получаю ошибку в строке, где указан параметр combobox.Items.Filter. – BabyDoll 21 December 2015 в 07:52
Другие вопросы по тегам:

Похожие вопросы: