Как отобразить записи в listBox после listBox.clear() с помощью WPF?

Я новичок в C # и пытаюсь создать систему управления запасами.

Мне удалось запустить программу, заполнив два списка ListBox именем образца и соответствующим хранилищем. Нажав кнопку «Добавить образец в хранилище», он сохраняет оба элемента listItems в массиве или векторе (я не знаю, что это такое, я просто знаю синтаксис Python) и добавляет его в существующий текстовый файл. Затем он очищает listBoxes, чтобы убедиться, что я правильно сохранил новый образец и его место для хранения.

Мой вопрос:

Я хочу, чтобы отображались элементы в списках. этого не происходит из-за listBox.clear (). Вы знаете, как это сделать?

Я ценю помощь.

MainWindow.xaml

      <Window x:Class="OMD_Inventory_Management_System.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:OMD_Inventory_Management_System"
    mc:Ignorable="d"
    Title="OMD Inventory Management System" Height="450" Width="800">

    <Grid Margin="10">

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ListBox Grid.Row="1" Grid.Column="0" x:Name="lstSample" />
        <ListBox Grid.Row="1" Grid.Column="1" x:Name="lstBin" />

        <StackPanel Grid.Row="1" Grid.Column="2" Margin="5,0,0,0">
            <Label>Sample name:</Label>
            <TextBox x:Name="txtSampleName" />
            <Label>Storage bin:</Label>
            <TextBox x:Name="txtStorageBin" />
            <Button x:Name="Button" Margin="0,5,0,0" Click="ButtonAddName_Click">Add sample to storage</Button>
        </StackPanel>

    </Grid>
</Window>

MainWindow.xaml.cs *

      using System.Threading.Tasks;
using System.Windows;
using System.IO;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace OMD_Inventory_Management_System
{
    public partial class MainWindow : Window
    {
        private void ButtonAddName_Click(object sender, RoutedEventArgs e)
        {
        if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
            lstSample.Items.Add(txtSampleName.Text);
        if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
            lstBin.Items.Add(txtStorageBin.Text);
        using (StreamWriter outputFile = File.AppendText("Inventory.txt"))
        { outputFile.WriteLine((lstSample.Items[0], lstBin.Items[0]).ToString()); }
        lstSample.Items.Clear();
        lstBin.Items.Clear();
        }
    }
}

1 ответ

MainWindow.xaml

      <Window x:Class="OMD_Inventory_Management_System.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:OMD_Inventory_Management_System"
    mc:Ignorable="d"
    Title="OMD Inventory Management System" Height="450" Width="800">

    <Grid Margin="10">

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ListBox Grid.Row="1" Grid.Column="0" x:Name="lstSample" />
        <ListBox Grid.Row="1" Grid.Column="1" x:Name="lstBin" />

        <StackPanel Grid.Row="1" Grid.Column="2" Margin="5,0,0,0">
            <Label>Sample name:</Label>
            <TextBox x:Name="txtSampleName" />
            <Label>Storage bin:</Label>
            <TextBox x:Name="txtStorageBin" />
            <Button x:Name="Button" Margin="0,5,0,0" Click="ButtonAddName_Click">Add sample to storage</Button>
            <Button x:Name="Button2" Margin="0,5,0,0" Click="ButtonClean_Click">Clean</Button>
            <Button x:Name="Button3" Margin="0,5,0,0" Click="ButtonDel_Click">Delete All</Button>
        </StackPanel>

    </Grid>
</Window>

MainWindow.xaml.cs

      using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace OMD_Inventory_Management_System
{
    public partial class MainWindow : Window
    {
        private void ButtonAddName_Click(object sender, RoutedEventArgs e)
        {

            bool error = false;
            if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
            {
                lstSample.Items.Add(txtSampleName.Text);
            }
            else { error = true; }
                
            if (!string.IsNullOrWhiteSpace(txtSampleName.Text) & !string.IsNullOrWhiteSpace(txtStorageBin.Text))
            {
                lstBin.Items.Add(txtStorageBin.Text);
            }
            else { error = true; }


            if (error)
            {
                MessageBox.Show("Error!");
                return;
            }


            try
            {
                //save temp txtbox
                ExampleAsync(txtSampleName.Text, txtStorageBin.Text, true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            //Clean listbox////
            lstSample.Items.Clear();
            lstBin.Items.Clear();
            ////////////////////////////

            //show txt in list
            ExampleAsync(null, null, false);





        }


        private void ButtonClean_Click(object sender, RoutedEventArgs e)
        {
            lstSample.Items.Clear();
            lstBin.Items.Clear();
        }

        private void ButtonDel_Click(object sender, RoutedEventArgs e)
        {
            File.Create("Inventory.txt").Close();
            lstSample.Items.Clear();
            lstBin.Items.Clear();
        }


        public void ExampleAsync(string _txtSampleName, string _txtStorageBin, bool _temp)
        {
            if (_temp)
            {
                string lines = _txtSampleName + "\n" + _txtStorageBin+"\n";
                File.AppendAllText("Inventory.txt", lines);
                txtSampleName.Text = String.Empty;
                txtStorageBin.Text = String.Empty;
            }
            else
            {
                string text = System.IO.File.ReadAllText("Inventory.txt");

                int counter = 1;
                string line;

                System.IO.StreamReader file =
                    new System.IO.StreamReader("Inventory.txt");
                while ((line = file.ReadLine()) != null)
                {
                    counter++;
                    if (counter == 2)
                    {
                        lstSample.Items.Add(line);
                    }
                    else
                    {
                        lstBin.Items.Add(line);
                        counter = 1;
                    }

                }

                file.Close();



            }
        }
    }
}
Другие вопросы по тегам