Я ненавижу, когда это происходит, но после публикации моего вопроса я немного отошел от компьютера и начал делать что-то еще. В этот момент все встало на свои места. Стюарт, в ответ на ваш вопрос, TodayPanel не был MvxModelView, и в этом была суть проблемы. То, что я делал, это передать список TodayPanels в listview, который был объектом сущности SQLite, а не объектом MvxModelView.
Для других, которые могут быть с этим связаны, я собираюсь опубликовать свое решение здесь.
Итак, вот что я в итоге сделал. Сначала я создал класс для каждого из объектов сущности TodayPanel, унаследованных от абстрактного базового класса, унаследованного от MvxModelView.
public abstract class TodayBaseViewModel : MvxViewModel
{
protected TodayViewModel TodayViewModel { get; set; }
protected IDataService DataService { get; set; }
public String Name { get; set; }
public String Title { get; set; }
public Boolean CanHide { get; set; }
public Boolean Visible { get; set; }
public Int32 SortOrder { get; set; }
public String View { get; set; }
protected abstract void SetEventHandlers();
protected BaseViewModel(IDataService dataService)
{
DataService = dataService;
}
public void Init(TodayViewModel todayViewModel)
{
TodayViewModel = todayViewModel;
SetEventHandlers();
}
}
Я сделал его абстрактным, так как я хотел, чтобы в последнем классе были добавлены 0 или более обработчиков событий. метод, который осуществляется с помощью абстрактных SetEventHandlers():
public class CoachSaysViewModel : TodayBaseViewModel
{
public CoachSaysViewModel(IDataService dataService)
: base(dataService)
{
}
protected override void SetEventHandlers()
{
TodayViewModel.ConnectionUpdated += TodayViewModelConnectionUpdated;
TodayViewModel.NewActivityReceived += TodayViewModelNewActivityReceived;
}
protected void TodayViewModelNewActivityReceived(Object sender, EventArgs.ActivityReceivedEventArgs e)
{
}
protected void TodayViewModelConnectionUpdated(Object sender, EventArgs.ConnectionUpdatedEventArgs e)
{
}
}
Затем я создал метод расширения, который преобразует TodayPanel объект к одному из классов, который наследует от TodayBaseViewModel.
public static BaseViewModel ToBaseViewModel(this TodayPanel todayPanel, TodayViewModel todayViewModel)
{
BaseViewModel model = null;
switch (todayPanel.View)
{
case "Today_QuickView":
model = Mvx.IocConstruct<QuickViewViewModel>();
break;
case "Today_CoachSays":
model = Mvx.IocConstruct<CoachSaysViewModel>();
break;
}
if (model == null)
return null;
model.CanHide = todayPanel.CanHide;
model.Name = todayPanel.Name;
model.SortOrder = todayPanel.SortOrder;
model.Title = todayPanel.Title;
model.View = todayPanel.View;
model.Visible = todayPanel.Visible;
model.Init(todayViewModel);
return model;
}
Это тогда позволило мне создать список MvxViewModels, которые затем связаны с MvxListView и, следовательно, имеют право делать дополнительную обработку, что я хочу сделать.
Я уверен, что есть некоторые улучшения, которые я могу сделать до конечного результата, и если вы видите что-нибудь, не стесняйтесь указать на это. :)
Можете ли вы отредактировать свой вопрос, чтобы объяснить 1, что такое список вашей модели (ваш код предполагает, что это список объектов TodayPanel?) И 2 пример того, что вы подразумеваете под фрагментом внутри элемента списка. С удовольствием пытаюсь помочь, но пока не понимаю. – Stuart