Бесконечный поворотный контроль
Я пытаюсь использовать Pivot
управление для приложения типа календаря, где каждый Pivot
представление показывает некоторую информацию о текущем дне. Когда пользователь перемещается вперед, отображается следующий день. Я реализовал это, добавив элементы в конец Pivot
Коллекция предметов, которая отлично работает.
Моя проблема возникает, когда пользователь пытается вернуться к предыдущему дню. В этом случае новый элемент добавляется в начале Pivot
коллекция предметов. Хотя добавление работает, показанный элемент Pivot всегда неправильный (т. Е. Вновь добавленный элемент). настройка SelectedItem
на Pivot
контроль не помогает.
Я думаю Pivot
не может быть правильным контролем для моей задачи, поэтому любая помощь о том, какой вид использовать или как решить мою вышеупомянутую проблему с Pivot
высоко ценятся
код для моей Viewmodel, который реализует движение вперед / назад один день.Pages
связан с осью ItemSource
,
public class TrackDayViewModel : HubViewModelBase
{
private DateTime _CurrentDay;
public DateTime CurrentDay
{
get { return _CurrentDay; }
set
{
if (value.CompareTo (_CurrentDay) != 0)
{
_CurrentDay = value;
OnPropertyChanged("CurrentDay");
}
}
}
public TrackDayViewModel ()
{
var day = DateTime.Now;
CurrentDay = day.Midnight();
Pages.Add(new DayViewModel(CurrentDay.AddDays(-1)));
Pages.Add(new DayViewModel(CurrentDay));
Pages.Add(new DayViewModel(CurrentDay.AddDays(1)));
SelectedItem = Pages[1];
this.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "SelectedItem")
{
var si = SelectedItem as DayViewModel;
if (si != null)
{
var idx = Pages.IndexOf(SelectedItem);
if (idx==0)
{
Pages.Insert(0, new DayViewModel(si.Day.AddDays(-1)));
SelectedItem = Pages[1];
}
else if (idx == (Pages.Count - 1))
{
Pages.Add(new DayViewModel(si.Day.AddDays(1)));
}
}
}
};
}
}
РЕДАКТИРОВАТЬ: Изменить, что решило мою проблему:
this.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "SelectedItem")
{
var si = SelectedItem as DayViewModel;
if (si != null)
{
var idx = Pages.IndexOf(SelectedItem);
int nextIdx = (idx + 1) % 3;
int prevIdx = ((idx - 1)<0) ? 2 : (idx-1);
Pages[nextIdx] = new DayViewModel(si.Day.AddDays(1));
Pages[prevIdx] = new DayViewModel(si.Day.AddDays(-1));
}
}
};
2 ответа
Для этого я бы использовал элемент управления Pivot с 4 страницами.
В любой момент предыдущая, текущая и следующая страницы будут содержать правильные данные - и у вас всегда будет одна (пустая) страница
Затем вы можете реагировать на события, когда ваша текущая страница изменяется и изменилась - используйте эти события, чтобы настроить текущую (пустую) страницу для правильного нового содержимого, а затем очистить новую (пустую) страницу.
Рекомендации по управлению Pivot гласят, что этого следует избегать, если у вас более 6 страниц.
Использование его для неограниченного количества страниц вне вопроса.
Я бы порекомендовал использовать TransitioningContentControl
с помощью сенсорных жестов для перемещения вперед и назад. TransitioningContentControl
позволяет использовать анимацию во время изменения ее содержимого.