'WPF : how to add item in listview form textbox

I have a problem in ListView. I want to add some text in ListView from a textbox but here I can add 1 item why? What I'm trying to do is

  • add text to a listview from a textbox
  • Load text from file.txt (like split) and put it into the listview

When you press the button, it is added once.

Here is the text stored in file.txt

Ice Cream|22|Canned Goods|50|Meat & Seafood|80

I want to split the line from file.txt and put it into a listview

Ice Cream|22

Ice Cream will be in the first place and 22 it will be in second place

enter image description here

<ListView x:Name="ListView1" ItemsSource="{Binding MyData}" HorizontalAlignment="Left" Height="240" Margin="20,100,0,0" VerticalAlignment="Top" Width="280" Background="#FF636363" Foreground="White">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding NameItem}" Width="210"/>
            <GridViewColumn Header="Number" DisplayMemberBinding="{Binding ItemFast}" Width="55"/>
        </GridView>
    </ListView.View>
</ListView>

Here is the source code:

using System;
using System.Collections.Generic;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.IO;

namespace Wpf_ListView
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        StreamReader SR;
        StreamWriter SW;

        public List<DataItems> MyData { get; set; }

        ListBox LB = new ListBox();

        System.Timers.Timer TimerReader = new System.Timers.Timer();

        string[] ReadAllText;
        string LoadText;

        int x = 0;

        string path = Environment.CurrentDirectory + @"\File\Data.txt";

        private void MainWindow1_Loaded(object sender, RoutedEventArgs e)
        {
            SR = new StreamReader(path);
            ReadAllText = SR.ReadToEnd().ToString().Split('|');
            SR.Close();

            foreach (var item in ReadAllText)
            {
                LB.Items.Add(item);
            }

            TimerReader.Elapsed += ReadTick;
            TimerReader.Interval = 100;
            TimerReader.Enabled = true;
        }

        private void ReadTick(object sender, ElapsedEventArgs e)
        {
            this.Dispatcher.Invoke(() =>
           {
               try
               {
                   MyData = new List<DataItems>();
                   DataItems data = new DataItems();

                   data.NameItem = LB.Items[x].ToString();
                   x++;
                   data.ItemFast = LB.Items[x].ToString();
                   x++;

                   MyData.Add(data);
                   DataContext = this;

                   if (x == LB.Items.Count)
                   {
                       x = 0;
                       TimerReader.Enabled = false;
                   }
               }
               catch
               {

               }
           });
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MyData = new List<DataItems>();

            DataItems data = new DataItems();
            data.NameItem = ItemNames.Text; // textbox 1
            data.ItemFast = ItemPrices.Text; // textbox 2

            MyData.Add(data);
            DataContext = this;

            SR = new StreamReader(path);
            LoadText = SR.ReadToEnd(); // Here because the new text has been placed and the old one will be deleted, so I called it up again before deleting it
            SR.Close();

            SW = new StreamWriter(path);
            SW.Write(LoadText + ItemNames.Text + "|" + ItemPrices.Text + "|");
            SW.Close();
        }
    }
}

I created a class called DataItems:

namespace Wpf_ListView
{
    public class DataItems
    {
        public string NameItem { get; set; }
        public string ItemFast { get; set; }
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source