각 Pivot
보기가 오늘 날짜에 대한 정보를 보여주는 캘린더 유형 앱에 Pivot
컨트롤을 사용하려고합니다. 사용자가 앞으로 스 와이프하면 다음 요일이 표시됩니다. 나는 이것을 잘 수행 한 Pivot
아이템 콜렉션의 끝에 아이템을 추가하여 구현했다.끝없는 피벗 컨트롤
사용자가 이전 날로 거슬러 올라가려고하면 내 문제가 발생합니다. 이 경우 새 항목이 Pivot
항목 수집의 시작 부분에 추가됩니다. 추가 기능이 작동하지만 표시된 Pivot 항목은 항상 잘못된 항목입니다 (즉 새로 추가 된 항목). Pivot
컨트롤에 SelectedItem
을 설정해도 도움이되지 않습니다.
내 생각에 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));
}
}
};
감사합니다, 당신의 대답은 올바른 방향으로 나를 가리켰다, 내가 사용했던 코드로 내 질문을 편집했다. – thumbmunkeys