Как не дать создавать одинаковые объекты в ObservableCollection?
У меня есть ObservableCollection в которой есть класс содержащий поле Name нужно чтобы при попытке задать имя которое уже существует, выскакивало предупреждение. Я пытался реализовать метод Equals в классе но в MainViewModel но при Jobs.Contains(value) получал ошибку связанную с преобразованием.
class Job
{
public string Name
{
get { return name; }
set
{
name = value;
}
}
private string name;
}
class MainViewModel
{
public ObservableCollection<Job> Jobs { get; set; } = new ObservableCollection<Job>();
public ObservableCollection<Job> _Jobs
{
get { return Jobs; }
set
{
/* if (Jobs.Contains(value))
{
//ошибка
}*/
Jobs = value;
}
}
Ответы (1 шт):
Автор решения: Progmech
→ Ссылка
Из всех комментариев я бы посоветовал использовать решение предложенное @Alexander Petrov. В случае если вам просто нужно вывести сообщение при добавлении элемента с существующим в коллекции именем, предлагаю использовать подписку на событие:
var model = new MainViewModel();
model.Jobs.CollectionChanged += JobsCollectionChanged;
void JobsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action != NotifyCollectionChangedAction.Add
|| sender is not ObservableCollection<Job> jobs
|| e.NewItems == null) return;
for(var i = e.NewItems.Count - 1; i >= 0; i--)
{
var job = e.NewItems[i] as Job;
if (job == null) continue;
if(jobs.Any(j => j.Name == job.Name))
{
// Ваше сообщение
}
}
}