【问题标题】:How do i add items to ListView in WPF如何在 WPF 中将项目添加到 ListView
【发布时间】: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)),


    }) ;

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

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

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

【问题讨论】:

    标签: c# wpf list listview textbox


    【解决方案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”文件中拥有它。要获得更准确的答案,请显示您显示这行代码的文件的完整内容。
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多