如何在 WPF 中将项目添加到 ListView
Posted
技术标签:
【中文标题】如何在 WPF 中将项目添加到 ListView【英文标题】:How do i add items to ListView in WPF 【发布时间】:2021-11-13 07:52:59 【问题描述】:我的 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 类,每个变量都绑定到一个变量:
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)),
) ;
代码有效,它允许我将值输出到列表框中,如下所示:
但是,当我尝试输入新值时,它不会输出新项目,而是更新第一个项目的信息:
如何让它添加新项目而不是更新信息?
【问题讨论】:
【参考方案1】:您需要使用可观察集合创建只读字段:
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)
)
);
【讨论】:
是否在 TimePage.cs 中创建只读字段? 您必须在您当前拥有代码List <Modules> modules = new List <Modules> ();
的文件中创建这样一个字段,您很可能在“TimePage.xaml.cs”文件中拥有它。要获得更准确的答案,请显示您显示这行代码的文件的完整内容。以上是关于如何在 WPF 中将项目添加到 ListView的主要内容,如果未能解决你的问题,请参考以下文章
如何在可扩展的listview android中将孩子添加到特定的父母