2011-02-28 77 views
5

我试图使用日历类型应用程序的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 2011-02-28 20:53:27

1

枢轴控制指南指出,如果您的页面超过6页,应该避免使用它。

将它用于无限制的页面。

我会推荐使用TransitioningContentControl在触摸手势的帮助下翻转前进和后退。 TransitioningContentControl允许您在改变内容的同时使用动画。

+0

感谢您的回答,我知道我的解决方案它是一种滥用Pivot,但它似乎工作。 – thumbmunkeys 2011-02-28 20:57:59