我要实现的是页面加载时,只获取SelectedIndex=0的数据,然后根据Pivot的SelectionChanged动态获取其他项的数据,我用的是MVVM的Command的方式,不想用后台注册事件的方式来实现。下面的是一开始的代码:
前端xaml:
<phone:Pivot x:Name="pivot">
<phone:Pivot.Title>
<TextBlock Text="{Binding Path=PageName}"/>
</phone:Pivot.Title>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<Command:EventToCommand Command="{Binding GetFlightInfoCommand}" CommandParameter="{Binding Path=SelectedIndex, ElementName=pivot}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</phone:Pivot>
VM中的Command:
private RelayCommand<int> getFlightInfoCommand;
public RelayCommand<int> GetFlightInfoCommand
{
get
{
return getFlightInfoCommand ?? (getFlightInfoCommand = new RelayCommand<int>((x) =>
{
this.GetFlightInfo(this._landType, this._upDown, PivotSelectedIndex.ToString());
}));
}
}
这时候问题就出来了,页面首次加载时Pivot.SelectIndex=0,但是不会执行Command,向右滑动Pivot,这时会执行这个Command并且Pivot.SelectIndex=1,但是这时候x的值=0,也就是说执行Command后,x的值是前一个PivotItem的Index,而不是正常的触发Pivot的SelectionChanged事件的下一个PivotItem的SelectIndex值。不知道有没有大神可以帮忙解惑?
后来想到个变通的办法,就是双向绑定piovt的SelectIndex,
前端xaml:
<phone:Pivot x:Name="pivot" SelectedIndex="{Binding Path= PivotSelectedIndex,Mode=TwoWay}">
</phone:Pivot>
ViewModel:
public int PivotSelectedIndex
{
get
{
return pivotSelectedIndex;
}
set
{
if (pivotSelectedIndex != value)
{
this.GetFlightInfo(this._landType, this._upDown, value.ToString());
}
pivotSelectedIndex = value;
RaisePropertyChanged("PivotSelectedIndex");
}
}