2016-09-15 155 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