我正在尝试将Pivot控件用于日历类型的应用程序,其中每个Pivot视图显示有关当天的一些信息.当用户向前滑动时,显示第二天.我通过在Pivot Item集合的末尾添加项目来实现这一点,这很好.
当用户尝试返回前一天时,我的问题就出现了.在这种情况下,在Pivot项集合的开头添加一个新项.虽然添加有效,但显示的Pivot项始终是错误的(即新添加的项).在Pivot控件上设置SelectedItem没有帮助.
我认为Pivot可能不是我的任务的正确控制,所以任何关于使用什么视图或如何修复我的上述Pivot问题的帮助都非常感谢.
我的viewmodel的代码,它实现了前进/后退一天.
Pages绑定到Pivot 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));
- }
- }
- };