Как я могу обновить время, когда тот же элемент добавляется в список? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу обновить существующий элемент, когда тот же элемент добавлен в список. В текущем коде то же значение добавляется в список.

При добавлении нового элемента с помощью "CollectionChanged + = Eevnt_CollectionChanged" нужно ли проверять и удалять существующие элементы и добавлять новые элементы?

Вот код:

public class Item: ModelBase
{
    private string _nowDate;
    public String NOWDATE 
    { 
         get { return _nowDate; }
         set { _nowDate = value; OnPropertyChanged("NOWDATE"); }
    }

    private string _name;
    public String Name 
    {
         get { return _name; } 
         set { _name = value; OnPropertyChanged("Name"); } 
    }
}


private ObservableCollection<Item> _item;
public ObservableCollection<Item> Items
{
    get { return _item; }

    set
    {
        _item= value;
        OnPropertyChanged("Items");
    }
}

... some code ...

while(true){
    ...

    Item.Insert(0, new Item
    {
        NOWDATE = DateTime.Now.ToString(dateformat),
        Name = itemName     
    }

    ...
}

На рисунке 1 показаны результаты текущего списка. enter image description here

Я хочу отобразить только самый последний, как показано на рисунке 2. enter image description here

Пожалуйста, дайте мне знать, если есть хороший способ решить эту проблему.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать Linq, чтобы проверить, существует ли предмет.

Не забудьте использовать библиотеку Linq.

using System.Linq;

//Search the list to see if the name exists
//Note, SingleOrDefault throws an error if more than one result is found.
Item updateItem = Items.SingleOrDefault(i => i.Name == itemName);

//Check if the Item exists in the list
if(updateItem != null)
{
    //If it does, update the time
    updateItem.NOWDATE = newDate;
}
else
{
    //If it doesn't, add a new Item
    Item.Insert(0, new Item
    {
        NOWDATE = DateTime.Now.ToString(dateformat),
        Name = itemName     
    }
}

//Now, sort the items so the ones with the earlier date appear first
Items = Items.OrderByDescending(i => i.NEWDATE);

Надеюсь, это поможет.

...