【问题标题】:Adding to a bound ListView添加到绑定的 ListView
【发布时间】:2011-10-11 02:19:29
【问题描述】:

我正在尝试将一个人添加到露营者(人)列表中。我已将ListView(GridView) 绑定到数据库,它会显示所有姓名、年龄和等级。但是现在我正在尝试添加一个新人并将他与其他所有人一起添加(显示)到ListView。任何帮助是极大的赞赏。

这是我所拥有的:ObservableCollection

class BindingCamper
{  // This class assist in binding campers from listview to the textboxes on the camperspage
    public ObservableCollection<Camper> Campers { get; private set; }

    public BindingCamper()
    {
        Campers = new ObservableCollection<Camper>();

    } 
}

这是我将名称列表添加到列表视图的地方:

       MainWindow _parentForm;

    public ObservableCollection<Camper> Campers { get; private set; }

    public CampersPage(MainWindow parent)
    {
        _parentForm = parent;
        InitializeComponent();


        var bindMe = new BindingCamper();

        for (int i = 0; i < _parentForm.allCampers.Count; i++)
            bindMe.Campers.Add(new Camper { Name = "" + _parentForm.allCampers[i].getName(), Ages = _parentForm.allCampers[i].getAge(), SchoolGrade = _parentForm.allCampers[i].getGrade() });
        DataContext = bindMe;

在这里我添加了一个新的露营者(人),我正在尝试将他/她添加到列表视图中:

            String nameMe;
        nameMe = txtNewFirstName.Text ;
        int age;
        int grade;
        if (nameMe != "" && IsNumber(txtNewGrade.Text) && IsNumber(txtNewAge.Text))
        { 
            age = Convert.ToInt16(txtNewAge.Text);
            grade = Convert.ToInt16(txtNewGrade.Text);
            // Create New Camper


            Camper person = new Camper(age, grade, nameMe);

            _parentForm.allCampers.Add(person);
            //_parentForm.camperPage.listViewCampers.Items.Refresh();
            var bind = new BindingCamper();
          //  bind.Campers.Add(new Camper { Name = person.getName(), Ages = person.getAge(), SchoolGrade = person.getGrade() });
          //  _parentForm.camperPage.Campers.Add(new Camper { Name =  person.getName(), Ages = person.getAge(), SchoolGrade = person.getGrade() });

            Close();

【问题讨论】:

  • 您在哪里存储露营者:在 BindingCamper 类中还是在 ObservableCollection CampersPage 的露营者属性中?
  • 我很确定 BindingCamper。我能想到的唯一方法是当我创建一个新的露营者添加到列表中时,我需要刷新列表视图以显示他。你认为这可能是一种方法,你知道我该怎么做吗?我猜几乎必须刷新数据库。我不确定。

标签: c# wpf listview data-binding observablecollection


【解决方案1】:

你不应该刷新数据库来添加露营者:

Camper person = new Camper(age, grade, nameMe);
if TryAddToDatabase(person)
{
    bindMe.Campers.Add(person);
}

如果ListView 绑定到 bindMe.Campers,它将自动刷新并显示新项目。我还建议您完整阅读WPFTutorial,这样您以后就不会做任何额外的工作了。

【讨论】:

  • @TMan:这是您应该实现将人员添加到数据库的方法。 IE。您还没有从数据库中刷新所有人,因为这比添加一个人更难提高性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2020-11-03
  • 1970-01-01
相关资源
最近更新 更多