Я впервые использую MVVM Light, так что потерпите меня ...
У меня есть LongListSelector на моей главной странице, и я использую RelayCommand для загрузки данных из базы данных SQLCE при загрузке страницы.
В моей MainViewModel у меня есть свойство Workouts:
public const string WorkoutsPropertyName = "Workouts";
private PublicGrouping<DateTime, Workout> _workouts;
public PublicGrouping,DateDime, Workout> Workouts
{
get { return workouts; }
set
{
if (_workouts == value) { return; }
_workouts = value;
RaisePropertyChanged(WorkoutsPropertyName);
}
}
Затем в конструкторе я создаю LoadedCommand:
public MainViewModel()
{
LoadedCommand = new RelayCommand(() =>
{
context = new XLogDataContext();
using (context)
{
if (context.Workouts.Count() > 0)
{
var workoutsByDate = from workout in context.Workouts
group workout by workout.WorkoutDate
into c
orderby c.Key
select c;
Workouts = workoutsByDate as PublicGrouping<DateTime, Workout>;
}
}
});
}
Когда запускается RelayCommand, Workouts всегда возвращает ноль. Я знаю, что данные возвращаются, поэтому я думаю, что проблема заключается в приведении запроса LINQ к PublicGrouping. Я также попытался создать свойства как
ObservableCollection<PublicGrouping<DateTime, Workout>>
но это тоже не работает.
UPDATE:
Я изменил RelayCommand для использования этой строки:
Workouts = new PublicGrouping<DateTime, Workout>(workoutsByDate);
и добавил этот конструктор для PublicGrouping:
private readonly IGrouping<TKey, TElement> _internalGrouping;
public PublicGrouping(IOrderedQueryable<IGrouping<DateTime, Workout>> workoutsByDate)
{
_internalGrouping = (IGrouping<TKey, TElement>) workoutsByDate;
}
Я по-прежнему получаю исключение InvalidCastException для задания _internalGrouping в конструкторе.