2016-09-15 25 views
1

我有一个具有两个字段的窗体的C#WPF应用程序。每次提交表单时,我都想获取这些值并使用Instructor类将新项目添加到列表中。然后,我想遍历列表并在ListView元素中显示这些项目。我意识到我可以在没有课堂的情况下做到这一点,但是让课堂成为我学校作业的一项要求。如何用按钮单击来创建列表,然后使用C#wpf循环它们?

这里是我的主窗口类:

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我在做什么错?我已经在代码中注释了错误发生的位置。

+1

is lvInstructorList是一个字符串列表吗? –

+0

它是一个ListView xaml元素。 – ShoeLace1291

回答

0

尝试更换这行:

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); 
0

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

总之

列表视图需要一个对象,所以你需要添加的项目一样,

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

,你应该

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

0

不知道为什么要循环再结合它在XAML和再次到lvInstructorList。但是你必须清楚每一次。

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

但您需要指定属性路径。否则listview将只显示' .Instructor' – Radinator

+0

正确。绑定路径可以在xaml中完成 –

0

它看起来像我不想将列表视图绑定到对象,而只是将字符串值插入列表视图。如果是这样的话:

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