继续《在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,接收到参数。