我要实现的是页面加载时,只获取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");
            }
        }

今天无意中从其他的博客中看到另外一个解决办法,仍然是第一种的绑定Command的方法,只不过参数改变了,直接把Pivot传进去:

<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 ElementName=pivot}"/>
</i:EventTrigger>
</i:Interaction.Triggers> </phone:Pivot>

后台Command:

 public RelayCommand<Pivot> SelectionChangedCommand
{
get
{
return selectionChangedCommand ?? (selectionChangedCommand = new RelayCommand<Pivot>(x =>
{
if (x == null)
return;
switch (x.SelectedIndex)
{
case :
break;
case :
break;
case :
break;
}
}));
}
}

Pivot的SelectionChanged事件绑定到VM的Command的更多相关文章

  1. WPF中如何将ListViewItem双击事件绑定到Command

    今天的博客将介绍如何实现ListViewItem双击事件绑定到ViewModel中的Command.实现方法借助了Style中的EventSetter,请看下面的详细代码: <ListView ...

  2. WPF Event 在 Command 中的应用初级篇,支持所有Event 展示松耦合设计的全部代码 - 解决TextBoxBase.TextChanged或者TextBox.TextChanged等类似事件绑定问题。

    做过WPF开发的人,都知道做MVVM架构,最麻烦的是Event的绑定,因为Event是不能被绑定的,同时现有的条件下,命令是无法替代Event.而在开发过程中无法避免Event事件,这样MVVM的架构 ...

  3. vuejs学习笔记(1)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  4. vuejs学习笔记(2)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  5. v-on事件绑定指令

    v-on:事件绑定 v-on简写:@ 绑定click事件时: 代码: <script> window.onload= () =>{ let vm=new Vue({ el:'#two ...

  6. [Vue]组件——使用.native和$listeners将控件的原生事件绑定到组件

    1.方法1:.native修饰符 1.1.native修饰符:将原生事件绑定到组件的根元素上 <base-input v-on:focus.native="onFocus"& ...

  7. WPF中MVVM模式下控件自有的事件绑定

    1.原因 在WPF中单纯的命令绑定往往不能满足覆盖所有的事件,例如ComboBox的SelectionChanged事件,DataGrid的SelectionChanged事件等等,这时就可以用事件绑 ...

  8. Vue样式绑定、事件绑定

    1.样式绑定 1.1class类标签绑定 <p :class="对象"> <p :class="数组"> <p :class=&q ...

  9. vue样式操作与事件绑定

    Vue笔记 1 Vue实例 (VM) var vm = new Vue({    el:'#app', //挂载元素        //数据    data: {        title:'值', ...

随机推荐

  1. Nginx的安装与使用

    在 CentOS 7 系统上: $ sudo rpm --import http://nginx.org/keys/nginx_signing.key $ sudo rpm -ivh http://n ...

  2. HBase 高性能加入数据 - 按批多“粮仓”式解决办法

    摘要:如何从HBase中的海量数据中,以很快的速度的获取大批量数据,这一议题已经在<HBase 高性能获取数据>(http://www.cnblogs.com/wgp13x/p/42451 ...

  3. 利用jsp和servlet,MySQL实现简易报表

    beans包和jdbc包代码不放了,麻烦 Service.java: package service; import java.sql.Connection;import java.sql.Resul ...

  4. jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用

    一.jQuery Form的其他api  1.  formSerialize 将表单序列化成查询串.这个方法将返回一个形如: name1=value1&name2=value2的字符串.是否可 ...

  5. Linux 下从头再走 GTK+-3.0 (六)

    在 GTK3 中增加了一个 GtkApplicaton 类,便于我们处理多窗口程序,同时有了 GtkApplication 我们也更容易创建灵活,易用,界面美观的应用程序. 在前面的几个例子中,演示了 ...

  6. SCAU巡逻的士兵

    1142 巡逻的士兵 Description 有N个士兵站成一队列, 现在需要选择几个士兵派去侦察. 为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士 ...

  7. SQL-一道特殊的字符串分解题目

    本题不是一道直接的字符串拆解, 应用场景如下,表中有一个字段,是表示事件受影响的国家集合,使用逗号进行分隔,不幸的是,居然发现有些国家本身就带有逗号,这样在规范化的时候,如何准确地找到这些国家呢? 以 ...

  8. java 方法参数-值调用,引用调用问题

    (博客内容来自于core java卷一) 1. xx调用:程序设计语言中方法参数的传递方式: 引用调用(call by reference):表示方法接收的是调用者提供的变量地址. 值调用(call ...

  9. windows下如何安装jira

    ---恢复内容开始--- 准备工作: 1.安装jdk,详细不在介绍 2.建立jira帐号:https://id.atlassian.com/login?application=mac&cont ...

  10. 第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)

    3. 依赖倒置原则(Dependence Inversion Principle,DIP) 3.1 定义 (1)要依赖抽象,不要依赖具体的实现类.简单的说就是对抽象(或接口)进行编程,不要依赖实现进行 ...