繁体   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