Estoy tratando de usar un control Pivot
para una aplicación de tipo calendario, donde cada vista Pivot
muestra algunas informaciones sobre el día actual. Cuando el usuario avanza, se muestra el día siguiente. Implementé esto agregando elementos al final de la colección de elementos Pivot
, que funciona bien.Endless Pivot Control
Mi problema ocurre cuando el usuario intenta retroceder al día anterior. En este caso, se agrega un nuevo elemento al comienzo de la colección de elementos Pivot
. Aunque la adición funciona, el elemento de Pivote mostrado siempre es el incorrecto (es decir, el elemento recién agregado). Establecer SelectedItem
en el control Pivot
no ayuda.
Creo que Pivot
puede no ser el control correcto para mi tarea, por lo que cualquier ayuda acerca de qué vista utilizar o cómo solucionar mi problema antes mencionado con Pivot
son muy apreciadas.
código para mi Viewmodel que implementa ir/retroceder un día. Pages
está ligado al Pivote 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)));
}
}
}
};
}
}
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));
}
}
};
gracias, su respuesta me indicó la dirección correcta, edité mi pregunta con el código que utilicé – thumbmunkeys