我如何在 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)
)
}
);
我的 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)
)
}
);