如何在 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 &lt;Modules&gt; modules = new List &lt;Modules&gt; (); 的文件中创建这样一个字段,您很可能在“TimePage.xaml.cs”文件中拥有它。要获得更准确的答案,请显示您显示这行代码的文件的完整内容。

以上是关于如何在 WPF 中将项目添加到 ListView的主要内容,如果未能解决你的问题,请参考以下文章

如何在可扩展的listview android中将孩子添加到特定的父母

WPF ListView - 如何以编程方式添加项目?

在 WPF ListView 中,如何防止自动滚动?

如何在 Flutter 中将 Hero 动画添加到我的 ListView?

C# wpf listview 如何动态添加 高手回答下

如何在 WPF 中将 DatePicker 添加到 DataGridTextColumn