C# 避免使用C在可观察集合中添加相同的项#
我有以下几件事:C# 避免使用C在可观察集合中添加相同的项#,c#,observablecollection,C#,Observablecollection,我有以下几件事: ObservableCollection<dateListModel> model = new ObservableCollection<dateListModel>(); public class dateListModel { public string dateSelected { get; set; } public string requestFor { get; set; } public int id { get;
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; }
}
但当我点击Add按钮时,它会显示“已经存在”消息,即使模型是空的。无论我如何在模型中添加项并尝试再次添加相同的项,它都允许添加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()
,则指定format作为方法的参数(如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");
我使用了:if(!model.Any(p=>p.dateSelected.date==myDatePicker.date.ToString())。它不起作用。要使上述代码正常工作,DatePicker的日期格式应该是什么?如果使用
.date
,日期格式将无关紧要。因此,请从您的myDatePicker.Date.ToString()
中删除.ToString()
,然后重试。我还有一个输入错误,应该是p.dateSelected.Date
而不是p.dateSelected.Date
Hi,谢谢。我使用了:if(!model.Any(p=>Convert.ToDateTime(p.dateSelected.date)==myDatePicker.date))。工作正常。我们无法比较日期和字符串(因为p.dateselected是一个字符串)
if (!model.Any(p =>p.dateSelected==myDatePicker.Date))
{
// Add new object to the collection
}
else
DisplayAlert ("Alert", "Already Exist!", "OK");