2011-02-28 4 views
5

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)); 
       } 
      } 
     }; 

답변

5

, 나는 4 페이지와 피벗 컨트롤을 사용하십시오. 한 번에

는, 이전의 현재와 다음 페이지는 정확한 데이터가 포함됩니다 - 그리고 당신은 항상 하나 (빈) 페이지가됩니다

현재 페이지가 변화하고있을 때 당신은 다음 이벤트에 응답 할 수 있습니다 변경됨 -이 이벤트를 사용하여 현재 (빈) 페이지를 올바른 새 내용으로 설정하고 새 (비어있는) 페이지를 지우십시오.

+1

감사합니다, 당신의 대답은 올바른 방향으로 나를 가리켰다, 내가 사용했던 코드로 내 질문을 편집했다. – thumbmunkeys

1

피벗 제어에 대한 가이드 라인에는 6 페이지가 넘는 경우 피하십시오.

문제가 발생한 페이지를 무제한으로 사용하는 경우.

앞뒤로 뒤집기위한 터치 제스처의 도움으로 TransitioningContentControl을 사용하는 것이 좋습니다. TransitioningContentControl을 사용하면 내용이 변경되는 동안 애니메이션을 사용할 수 있습니다.

+0

당신의 답을 고마워한다. 필자의 해결책은 피벗의 오용이다. – thumbmunkeys

관련 문제