WedX - журнал о программировании и компьютерных науках

Добавление данных в ObservableCollection не обновляет записи ListBox

У меня есть UserControl, привязанный к ICollectionView, который я реализовал для фильтрации базовой ObservableCollection.

public partial class DataStorage : UserControl
{
    public ObservableCollection<CardData> dataStore;
    private ICollectionView cards;

    private string filter;
    public string itemsInList { get; set; }

    public DataStorage()
    {
        // Default constructor
        InitializeComponent();
        // Set the dataStore to be ICollectionView
        dataStore = new ObservableCollection<CardData>();

        // Data Add
        this.AddSample();

        // Set the collection source
        this.cards = CollectionViewSource.GetDefaultView(dataStore);

        // set the filter
        this.cards.Filter = ContainsFilter;
}

// Other content here...

Когда я инициализирую UserControl, я добавляю некоторые образцы данных в ObservableCollection. Затем я устанавливаю ICollectionView в качестве представления по умолчанию для ObservableCollection и назначаю файлер.

На данный момент все работает по плану, и когда я обновляю элемент управления TextBox, он будет фильтровать образцы данных.

Изображение вывода

Если я затем снова вызову метод AddSample(), чтобы добавить больше данных в ObservableCollection, эти изменения не отразятся в пользовательском интерфейсе.

public void AddSample()
    {
        dataStore.Add(new CardData("tesat1", false, 1, 0));
        dataStore.Add(new CardData("test2", false, 2, 0));
        dataStore.Add(new CardData("test3", false, 3, 2));
        dataStore.Add(new CardData("test4", false, 4, 4));
        dataStore.Add(new CardData("test5", false, 5, 0));
        dataStore.Add(new CardData("help", false, 1, 0));
        dataStore.Add(new CardData("fish", false, 2, 0));
        dataStore.Add(new CardData("cat", false, 3, 2));
        dataStore.Add(new CardData("tease", false, 4, 4));
        dataStore.Add(new CardData("whelp", false, 5, 0));

Выше мой метод AddSample. Я пытался переделывать представление и фильтровать каждый раз, когда добавляю больше данных.

            // Set the collection source
        this.cards = CollectionViewSource.GetDefaultView(dataStore);

        // set the filter
        this.cards.Filter = ContainsFilter;

XAML — если применимо

       <TextBox x:Name="Filters" Text="{Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}" Height="55" Width="335" VerticalContentAlignment="Center" FontSize="22" />
    <ListBox Height="Auto" MaxHeight="200" MinHeight="0" x:Name="CardListBox"
           ItemsSource="{Binding Path=Cards}"
           SelectedItem="{Binding Path=SelectedCard}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=data}" Height="50" FontSize="22" VerticalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Я думаю, мне нужно добавить обработчик событий, когда базовая коллекция изменилась, но что с этим делать? Поскольку это, безусловно, тот же процесс, что и изменение коллекции, когда я вызываю AddSample().

Мои предложения или мысли приветствуются.

11.08.2016

  • Я полагаю, у вас есть «Карты» в качестве свойства? Вы показали только поле «карточки» (на которое вы ссылаетесь везде, кроме привязки) 11.08.2016
  • Первое, что я бы сделал для отладки, — это привязка к вашей наблюдаемой коллекции (как свойство) — это устранит любые проблемы с CollectionView или фильтрацией. 11.08.2016
  • ItemsSource="{Binding Path=Cards}" Если Cards определено в вашем источнике, было бы полезно включить его в свой вопрос. 11.08.2016

Ответы:


1

Во-первых, я предполагаю, что Cards - это ваш ItemsSource для ListBox. Затем, после того, как вы добавите свой элемент в карты, установите для ItemSource значение null, а затем сразу после этого верните его в карты или любой другой источник вашего элемента.

11.08.2016
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]