在listbox 里绑定了Person 对象来显示, 我现在需要把某个对象从这个listbox里删除,想删除的通过person 对象来传递,似乎不能直接用listbox.remove(person) 来删除,那我应该怎么删除任何一个想删除的对象.wpf

解决方案 »

  1.   

    你传的person对象是个重新new的新对象吧,虽然属性一模一样,但是地址不一样,所以listbox里找不到它for(int i=0;i<listbox1.Items.Count;i++)
    {
       Person p=listbox1.Items[i] as Person;
       if(p.ID == person.ID) //假设ID是主键
       {
          listbox1.Items.RemoveAt(i);
          break;
       }
    }
      

  2.   

    itemsource绑定一个List对象?你的Person得实现INotifyCollectionChanged跟INotifyPropertyChanged,或者直接用ObservableCollection<T>吧。然后后台直接操作这个ObservableCollection对象进行删除增加之类的操作就可以了
      

  3.   

    正解,千万别直接使用ListBox的Remove方法,顾名思义只是移除界面上的元素,不影响数据源的。
      

  4.   

    直接用ObservableCollection<T>吧, 它会通知UI修改界面的。LISTBOX<T>实现不了的
      

  5.   

    你哪里看到有LISTBOX<T>这东西的?真会扯,ListBox是个控件,不是泛型集合类。
      

  6.   

    WPF界面和数据不同。你只删除界面,那只是不显示了,但数据库还有数据,所以删除的时候获得对象,然后执行数据库删除方法!!
      

  7.   

    我觉得二楼说的有道理, 直接用remove方法,其实在我这个例子里连界面的东西都删不掉。我的person类已经实现了 INotifyPropertyChanged ,绑定到这个listview的数据源。但是用remove是没法实现界面的删除的。
      

  8.   

    你的ListBox的ItemSource绑定的是啥?绑定的那个集合或者List需要实现INotifyCollectionChanged并且在这个集合增加或者删除的时候触发事件通知UI进行更改。实现INotifyPropertyChanged对于你这集合的增删没啥用啊。都没触发事件怎么UI怎么会知道你要更改呢?
      

  9.   


    我认真看了下,好像没有进行绑定,程序是直接对这个lstveiw进行增加和删除操作,
      

  10.   


    ObservableCollection<Person> collection = new ObservableCollection<Person>();
    listBox.ItemsSource = collection;