在WindowsPhone8中生成基于MVVM Light的LongListSelector导航事件

继续《在WindowsPhone8中生成基于MVVM Light的LongListSelector命令绑定》,在上一例中,获得了LongListSelector的值,下面利用MVVM Light的消息机制处理导航事件。

1.创建一个类,命名为NavigationTo,可访问性改为public,包含两个属性:

public class NavigationTo
    {
        public string PageName { get; set; }
        public string PageParameter { get; set; }
    }

 属性PageName为即将导航至的页面,属性PageParameter为导航传递的参数

2.在MainViewModel中修改上一例子中的NavigationTap方法:

public void NavigationTap(MountainIndex mouIndex)
        {
            var navigationMsg = new NavigationTo() { PageName = "你导航到的页面名字.xaml", PageParameter=mouIndex.Name };
            Messenger.Default.Send<NavigationTo>(navigationMsg);
        }

 这里,我们将山峰的名字作为导航传递的参数。

3.在MainPage.cs中创建消息广播(这不违背mvvm初衷)

public void ReceiveMessage(NavigationTo action)
        {
            string navigationString = "/Views/"+action.PageName+".xaml";
            navigationString += string.Format("?NavigationParameter={0}", action.PageParameter);
            NavigationService.Navigate(new System.Uri(navigationString, System.UriKind.Relative));
        }

 然后在MainPage构造方法中注册这个消息

public MainPage()
        {
            InitializeComponent();
            Messenger.Default.Register<NavigationTo>(this, (action) => ReceiveMessage(action));
        }

 这样,我们的导航就创建完毕,下面我们新建一个测试页面(普通页面,不使用mvvm),命名为ContentPage.xaml,试试是否已可以传递参数:

xaml里写一个textblock,接受传参,在PageLoad事件中,将文本框内容设为接收参数:

private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
        {
            string queryS = this.NavigationContext.QueryString["NavigationParameter"];
            tbk_ReceiveParameter.Text = queryS;
        }

 结果如下:

点击阿尼玛卿

ok,接收到参数。

原文地址:https://www.cnblogs.com/valentineisme/p/3088269.html