Как отобразить записи в 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();
}
}
}
}