删除datagrid Wpf MVVM中的重复行?

当我从TextBox添加新元素时,我试图删除DataGrid中的重复元素。 也许,有人知道如何解决这个问题?

public class ShellViewModel : Screen
{
   private string _input = string.Empty;
    public ObservableCollection<Person> people;

    public ShellViewModel()
    {

    }

    public string Input
    {
        get
        {
            return _input;
        }
        set
        {
            _input = value;
            NotifyOfPropertyChange(() => Input);
        }
    }       

    public ObservableCollection<Person> People
    {
        get
        {
            return people;
        }
        set
        {
            people = value;
            NotifyOfPropertyChange(() => People);
        }
    }

    Person person = new Person();
    ObservableCollection<Person> persons = new ObservableCollection<Person>();
    public void Write()
    {
         person.name = Input;
         persons.Add(person);         
         People = persons;                     
    }
   }

向DataGrid添加元素没有任何问题,但是我不知道如何删除重复的元素。 预先谢谢你。

xuegc2002 回答:删除datagrid Wpf MVVM中的重复行?

您可以避免添加重复的记录

    public void Write()
    {
        person.name = Input;
        if (!persons.Contains(person))
            persons.Add(person);
        People = persons;
    }
,

在将它们添加到集合中之前,必须检查Person是否已经存在。

我还修复了您的代码中的一些问题。由于PeopleObservableCollection,因此您可以直接向其中添加项目,视图将在集合中注册更改并立即更新。
Person添加到集合时,还应该创建一个新实例,否则将覆盖现有实例。您当前正在使用单个Person。字段应该始终private

public class ShellViewModel : Screen
{ 
    public void ShellViewModel()
    {
      this.Input = string.Empty;
      this.People = new ObservableCollection<People>();      
    }

    private string _input = string.Empty;
    public string Input
    {
        get => _input;
        set
        {
            _input = value;
            NotifyOfPropertyChange(() => Input);
        }
    }       

    private ObservableCollection<Person> people;
    public ObservableCollection<Person> People
    {
        get => people;
        set
        {
            people = value;
            NotifyOfPropertyChange(() => People);
        }
    }

    public void Write()
    {
      if (string.IsNullOrWhiteSpace(this.input) 
        || this.People.Any(person => person.name.Equals(this.Input,StringComparison.OrdinalIgnoreCase))
      {
        return;
      }

      Person newPerson = new Person() {name = this.Input};
      this.People.Add(newPerson);      
   }
}
本文链接:https://www.f2er.com/3106818.html

大家都在问