繁体   English   中英

C#填充列表框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM