Control de pivote sin fin
Estoy tratando de usar unaPivot
control para una aplicación de tipo calendario, donde cadaPivot
view muestra algunas informaciones sobre el día actual. Cuando el usuario desliza hacia adelante, se muestra el día siguiente. Implementé esto agregando elementos al final de laPivot
Colección de artículos, que funciona bien.
Mi problema ocurre cuando el usuario intenta retroceder al día anterior. En este caso, se agrega un nuevo elemento al comienzo de laPivot
colección de artículos. Aunque la suma funciona, el elemento Pivot que se muestra siempre es el incorrecto (es decir, el elemento recién agregado). AjusteSelectedItem
sobre elPivot
control no ayuda.
Yo creo quePivot
s posible que @ no sea el control adecuado para mi tarea, por lo que cualquier ayuda sobre qué vista usar o cómo solucionar mi problema mencionado conPivot
son muy apreciados.
code para mi Viewmodel que implementa avanzar / retroceder un día. @Pages
está vinculado al PivotItemSource
.
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)));
}
}
}
};
}
}
EDIT: Cambio que resolvió mi problema:
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));
}
}
};