Разрешить пользователям добавлять несколько элементов в ObservableCollection c # - PullRequest
0 голосов
/ 25 июня 2018

У меня есть ListView, который должен заполняться на основе пользовательских данных. ListView привязан к моей коллекции ObservableCollection. Когда пользователь добавляет элемент, он вставляет, но сразу после того, как я делаю еще одно добавление, предыдущий элемент удаляется и заменяется последним добавленным элементом (создание элементов списка 1 вместо 2). Как я могу это исправить?

Код:

public ObservableCollection<string> Items { get; set; }

 private void Button_Clicked(object sender, EventArgs e)
        {
            Items = new ObservableCollection<string>
            {
                TxtEntry.Text
            };


            MyListView.ItemsSource = Items;
        }

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Это потому, что вы каждый раз создаете новую коллекцию.

Измените свой код следующим образом:

public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string>();

public YourConstructor()
{
   MyListView.ItemsSource = Items;
}

private void Button_Clicked(object sender, EventArgs e)
{
    Items.Add(TxtEntry.Text);
}

То, что вы видите здесь, - это создание экземпляра коллекции при первом создании свойства.

Затем в конструкторе вашего объекта установите ItemSource для ListView на ObservableCollection, а затем при каждом нажатии кнопки просто добавляйте элемент, вместо того, чтобы каждый раз создавать новую коллекцию.

Кроме того, вам не нужно каждый раз устанавливать ItemSource. Поскольку это ObservableCollection, ListView будет уведомлен о любых изменениях в коллекции.

0 голосов
/ 25 июня 2018

Вы должны добавить его в список, а не заново создавать список:

public ObservableCollection<string> Items { get; set; }

private void Button_Clicked(object sender, EventArgs e)
{
    if(Items == null) 
    {
        Items = new ObservableCollection<string>
        {
            TxtEntry.Text
        };
    } 
    else {
        Items.Add(TxtEntry.Text);
    }
    MyListView.ItemsSource = Items;
}
...