我如何在 WPF 中将项目添加到 ListView

How do i add items to ListView in WPF

我的 TimePage 中有一个列表视图 xaml:

<ListView x:Name="moduleList" Width="1120" Height="231" Margin="42,536,186,217" Grid.Column="1" >
    <ListView.View>
        <GridView>

            <GridViewColumn Header="Program Name" Width="160" DisplayMemberBinding="{Binding name}"/>
            <GridViewColumn Header="Program Code" Width="160" DisplayMemberBinding="{Binding code}"/>
            <GridViewColumn Header="Number of Credits" Width="160" DisplayMemberBinding="{Binding credits}"/>
            <GridViewColumn Header="Number of Hours" Width="160" DisplayMemberBinding="{Binding hours}"/>
            <GridViewColumn Header="Semester start date" Width="160" DisplayMemberBinding="{Binding date}"/>
            <GridViewColumn Header="Semester Weeks" Width="160" DisplayMemberBinding="{Binding weeks}"/>
            <GridViewColumn Header="Study Hours" Width="160" DisplayMemberBinding="{Binding studyhours}"/>
        </GridView>
    </ListView.View>
</ListView>

我的值取自 myModule class 并且每个变量都绑定到一个变量:

     public string name { get; set; }
     public string code { get; set; }
     public int credits { get; set; }
     public int hours { get; set; }
     public string date { get; set; }
     public int studyhours { get; set; }
     public int weeks { get; set; }

我在 TimePage.cs 中使用了这段代码,以便允许我将值添加到 listView 中:

 List<Modules> modules = new List<Modules>();
        modules.Add(new Modules()
        {     
        name =  namebox.Text,
        code =  codebox.Text,
        credits = int.Parse(0+creditbox.Text),
        hours = int.Parse(0+hoursbox.Text),
        date = semesterbox.Text,
        weeks = int.Parse(0+semesterweekbox.Text),
        studyhours = m1.Calculations(int.Parse(hoursbox.Text),
                   int.Parse(creditbox.Text),
                   int.Parse(semesterweekbox.Text)),


    }) ;

代码有效,它允许我将值输出到列表框中,结果如下:

但是,当我尝试输入新值时,它不会输出新项目,而是会更新第一项的信息:​​

如何让它添加新项目而不是更新信息?

您需要使用可观察集合创建只读字段:

private readonly ObsrvableCollection<Modules> modules
    = new ObservableCollection<Modules>();

一次,初始化XAML后,将字段值赋给ListView源:

    InitializeComponent();
    moduleList.ItemsSource = modules;

之后,在代码中,只使用字段中的集合。 别管 ListView UI。

   modules.Add(new Modules()
        {     
            name =  namebox.Text,
            code =  codebox.Text,
            credits = int.Parse(0+creditbox.Text),
            hours = int.Parse(0+hoursbox.Text),
            date = semesterbox.Text,
            weeks = int.Parse(0+semesterweekbox.Text),
            studyhours = m1.Calculations
                (
                   int.Parse(hoursbox.Text),
                   int.Parse(creditbox.Text),
                   int.Parse(semesterweekbox.Text)
                )
        }
   );