[英]C# Populating list box
我在填充列表框时遇到问题。 最初,我从网站上的某个人那里获得了帮助,但似乎并未充分发挥作用。 我正在尝试用文本文件中的项目填充列表框,到目前为止,这是代码:
namespace ACW2
{
/// <summary>
/// Interaction logic for InventoryWindow.xaml
/// </summary>
///
public partial class InventoryWindow : Window
{
public InventoryWindow()
{
InitializeComponent();
categoryComboBox.Items.Add("All");
categoryComboBox.Items.Add("Pizza");
categoryComboBox.Items.Add("Burger");
categoryComboBox.Items.Add("Sundry");
categoryComboBox.SelectedValue = "All";
PopulateList();
}
private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void categoryComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
PopulateList();
}
public void PopulateList()
{
listBox.Items.Clear();
using (StreamReader sr = new StreamReader(@"inventory.txt"))
{
while (!sr.EndOfStream)
{
for (int i = 0; i < 22; i++)
{
string StringListItem = sr.ReadLine();
if (!String.IsNullOrEmpty(StringListItem) &&
(categoryComboBox.SelectedItem != null &&
(StringListItem.Contains(categoryComboBox.SelectedItem.ToString()))))
listBox.Items.Add(StringListItem);
}
}
}
}
}
}
它只是以一个空的列表框结尾。 但是,这段代码确实填充了列表框,但是我觉得有两个StreamReader好像是多余的:
namespace ACW2
{
/// <summary>
/// Interaction logic for InventoryWindow.xaml
/// </summary>
///
public partial class InventoryWindow : Window
{
public InventoryWindow()
{
InitializeComponent();
categoryComboBox.Items.Add("All");
categoryComboBox.Items.Add("Pizza");
categoryComboBox.Items.Add("Burger");
categoryComboBox.Items.Add("Sundry");
categoryComboBox.SelectedValue = "All";
}
private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void categoryComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
listBox.Items.Clear();
StreamReader sr = new StreamReader("inventory.txt");
string i = sr.ReadToEnd();
string[] n = i.Split('\n');
foreach (string s in n)
{
listBox.Items.Add(s);
}
}
public void PopulateList()
{
listBox.Items.Clear();
using (StreamReader sr = new StreamReader(@"inventory.txt"))
{
while (!sr.EndOfStream)
{
for (int i = 0; i < 22; i++)
{
string StringListItem = sr.ReadLine();
if (!String.IsNullOrEmpty(StringListItem) &&
(categoryComboBox.SelectedItem != null &&
(StringListItem.Contains(categoryComboBox.SelectedItem.ToString()))))
listBox.Items.Add(StringListItem);
}
}
}
}
}
}
foreach (var line = File.ReadAllLines(@"inventory.txt"))
{
listBox.Items.Add(line);
}
与其从背后的代码中进行操作,不如使用您的项目类型(例如字符串或更健壮的对象)的ObservableCollection设置一个ViewModel,然后将ComboBox从XAML绑定到该集合属性名称。
这样,您将可以更轻松地维护该应用程序,并且视图分离是免费的:)
// SampleViewModel.cs public ObservableCollection<string> Categories = new ObservableCollection<string>(); // SampleView.xaml <Window.DataContext> <local:SampleViewModel/> </Window.DataContext> <ListView ItemSource="{Binding Categories}" />
这应该做:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.