在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,接收到参数。
这是我的个人日记本