2016-09-15 123 views
1

加入同一个项目中观察到的集合我有以下几点:避免使用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。我不想在我的模型中再次添加相同的日期。我错在哪里?

回答

1

试试这个:

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

+0

我用过:if(!model.Any(p => p.dateSelected.date == myDatePicker.Date.ToString()))。它不工作。为了在代码上面工作,DatePicker的日期格式应该是什么? – Dipak

+0

如果使用'.Date',则日期格式无关紧要。因此,从'myDatePicker.Date.ToString()'中移除'.ToString()'并尝试。此外,我有一个错字,它应该是'p.dateSelected.Date'而不是'p.dateSelected.date' –

+0

嗨,谢谢。我用:if(!model.Any(p => Convert.ToDateTime(p.dateSelected.date)== myDatePicker.Date))。工作得很好。 – Dipak

0

您可以直接比较两个日期而不将其转换为字符串。一个额外的笔记,你不需要使用.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"); 
+0

我们无法比较日期和字符串(因为p.dateselected是一个字符串) – Dipak