我正在尝试使用 Pivot
日历类型应用程序的控件,其中每个 Pivot
View 显示有关当天的一些信息。当用户向前滑动时,将显示第二天。我通过在 Pivot
末尾添加项目来实现这一点。元素收集,效果很好。
当用户尝试回到前一天时,就会出现我的问题。在这种情况下,Pivot
的开头添加了一个新项目。项目集合。尽管添加有效,但显示的 Pivot 项目始终是错误的(即新添加的项目)。设置SelectedItem
在 Pivot
控制没有帮助。
我认为 Pivot
可能不是我的任务的正确控制,所以任何关于使用什么 View 或如何解决我前面提到的 Pivot
问题的帮助高度赞赏。
我的 Viewmodel 的代码,它实现了一天向前/向后。Pages
绑定(bind)到枢轴 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));
}
}
};
最佳答案
为此,我将使用 4 页的 Pivot 控件。
在任何时候,上一页、当前页和下一页都将包含正确的数据 - 您将始终拥有一个(空白)页面
然后,您可以在当前页面正在更改和已更改时响应事件 - 使用这些事件将当前(空)页面设置为正确的新内容,然后清除新(空)页面。
关于windows-phone-7 - 无尽的枢轴控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146960/