【问题标题】:How can I create a list with button click and then loop through them with C# wpf?如何通过单击按钮创建一个列表,然后使用 C# wpf 循环遍历它们?
【发布时间】:2016-09-15 08:07:11
【问题描述】:

我有一个 C# WPF 应用程序,它有一个包含两个字段的表单。每次提交表单时,我都想获取值并使用 Instructor 类将新项目添加到列表中。然后,我想遍历列表并显示 ListView 元素中的项目。我意识到我可以在没有课程的情况下做到这一点,但是有课程是我学校作业的要求。

这是我的主窗口类:

public partial class MainWindow : Window
    {
        private List<Instructor> instList;
        public MainWindow()
        {
            InitializeComponent();
            List<Instructor> instList = new List<Instructor> { };
        }

        private void btnCreateInstructor_Click(object sender, RoutedEventArgs e)
        {
            spCreateInstructor.Visibility = (spCreateInstructor.Visibility == Visibility.Hidden) ? Visibility.Visible : Visibility.Hidden;
        }

        private void btnInstructorSubmit_Click(object sender, RoutedEventArgs e)
        {
            instList.Add(new Instructor { firstName = txtInstructorFirstName.Text, lastName = txtInstructorLastName.Text });
            foreach (var inst in instList)
            {
                lvInstructorList.Items.Add("{0} {1}", inst.firstName, inst.lastName);  
               //Error occurs on the line above.
            }
        }
    }

这是讲师班:

class Instructor
    {
        public string firstName { set; get; }
        public string lastName { set; get; }
    }

我的问题是我收到一条错误消息No overload for method Add takes 3 arguments 我做错了什么?我已经通过代码中的注释指出了错误发生的位置。

【问题讨论】:

  • lvInstructorList 是一个字符串列表吗?
  • 它是一个 ListView xaml 元素。

标签: c# wpf


【解决方案1】:

尝试替换这一行:

lvInstructorList.Items.Add("{0} {1}", inst.firstName, inst.lastName); 

这个

lvInstructorList.Items.Add(new Instructor { firstName = inst.firstName, lastName = inst.lastName }); 

这与您添加到instList 的方式类似。

编辑

在意识到 lvInstructorList 是一个 ListView xaml 元素后,这应该可以工作:

var listViewItem = new ListViewItem(new Instructor { firstName = inst.firstName, lastName = inst.lastName }); 
lvInstructorList.Items.Add(listViewItem);

【讨论】:

    【解决方案2】:

    这里是如何创建一个列表视图并在 wpf 中向其中添加项目 检查这个问题Add Items to Columns in a WPF ListView

    简而言之

    列表视图需要一个对象,因此您需要添加类似的项目

    lvInstructorList.Items.Add(lvInstructorList.Items.Add(new Instructor { firstName = inst.firstName, lastName = inst.lastName });
    

    你应该在 xaml 中绑定它

    <ListView x:Name="lvInstructorList">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding firstName }"/>
        </GridView>
    </ListView.View>
    

    【讨论】:

      【解决方案3】:

      不知道为什么要一次又一次地循环到 lvInstructorList。但是每次都要清零。

      instList.Add(new Instructor { firstName = txtInstructorFirstName.Text, lastName = txtInstructorLastName.Text });
          lvInstructorList.Clear();                
          foreach (var inst in instList)
          {
              lvInstructorList.Items.Add(inst); 
          }
      

      【讨论】:

      • 但是你需要指定属性路径。否则列表视图将只显示&lt;Namespacepath&gt;.Instructor
      【解决方案4】:

      在我看来,您并不打算将列表视图绑定到对象,而只是将字符串值插入到列表视图中。如果是这样的话:

      lvInstructorList.Items.Add(string.Format("{0} {1}", inst.firstName, inst.lastName)); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多