簡體   English   中英

避免使用 C# 在 Observable 集合中添加相同的項目

[英]Avoid adding same item in Observable Collection using C#

我有以下幾點:

ObservableCollection<dateListModel> model = new ObservableCollection<dateListModel>();

public class dateListModel
{
    public string dateSelected { get; set; }
    public string requestFor { get; set; }
    public int id { get; set; }
    public string weekDay { get; set; }
}

使用以下代碼將項目添加到 ObservableCollection:

public void onAddClicked(object sender, EventArgs e)
        {           
            try
            {   
                if (model.Any (p =>string.Format("{0:yyyy-MM-dd}", p.dateSelected.ToString())==string.Format ("{0:yyyy-MM-dd}",myDatePicker.Date.ToString()) == false))
                {
                    model.Add (new dateListModel {
                        dateSelected = string.Format("{0:yyyy-MM-dd}", myDatePicker.Date),
                        requestFor = requestFor.Items [requestFor.SelectedIndex],
                        id = 1,
                        weekDay = myDatePicker.Date.DayOfWeek.ToString ()
                    });

                    listview_MenuItem.ItemsSource = model;
                } 
                else
                    DisplayAlert ("Alert", "Already Exist!", "OK"); 
            }
            catch(Exception ex) 
            {
                DisplayAlert ("Alert",ex.ToString(),"OK");
            }
        }

但是當我單擊“添加”按鈕時,即使模型為空,它也會顯示“已存在”消息。 無論我如何在模型中添加項目並嘗試再次添加相同的項目,它都允許添加 ObservableCollection。 我不想在我的模型中再次添加相同的日期。 我錯在哪里?

嘗試這個:

if (!model.Any(p => p.dateSelected.Date == myDatePicker.Date))
{
    model.Add (new dateListModel { dateSelected = string.Format("{0:yyyy-MM-dd}", myDatePicker.Date), requestFor = requestFor.Items [requestFor.SelectedIndex], id = 1, weekDay = myDatePicker.Date.DayOfWeek.ToString()});
    listview_MenuItem.ItemsSource = model;
}

您不必最初將所有日期轉換為相同的字符串格式來檢查數據庫中是否存在具有該日期的記錄。 此外, !Any...等價於Any... == false

您可以直接比較兩個日期,而無需將其轉換為字符串。 附加說明您不需要使用.ToString()來獲取特定格式的日期,當您使用時,日期將轉換為字符串,然后格式將不會按您的預期應用。 如果您使用.ToString()則將格式指定為該方法的參數(例如DateTime.Now.ToString("yyyy-MM-dd") )。

簡而言之,您必須像這樣更改條件才能使其工作。

if (!model.Any(p =>p.dateSelected==myDatePicker.Date))
{

   // Add new object to the collection
}
else
   DisplayAlert ("Alert", "Already Exist!", "OK");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM