SL3 Nav框架+ MVVM灯

时间:2010-03-01 20:33:25

标签: silverlight silverlight-3.0 mvvm navigation mvvm-light

感谢您花时间阅读我的问题。任何指导都非常感谢。

我在LOB应用程序中使用SL3 Navigation框架。我目前正在使用MVVM Light作为框架指南。

我有一个由员工组成的数据网格,当“用户”点击数据网格中的“员工ID链接”时,我将用户转移到“编辑页面”。我想将“员工ID”作为查询参数传输到“编辑页面”。

这里的问题是:我可以访问EditStaffView.xaml.cs中的查询参数 - 我不想这样做。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (this.NavigationContext.QueryString.ContainsKey("staffcode"))
        {
            string title = this.NavigationContext.QueryString["staffcode"];
        }
    }

我想在我的viewmodel中检索查询参数,并根据查询参数,我将执行某些操作。当调用构造函数时,我希望“view”传递staffid,如下所示

    public EditStaffViewModel(int staffId)
    {
        LoadData(staffId);
    }

我正在动态地构建数据网格中的超链接按钮,如下所示:

staffListingModel.HyperlinkNavigationUri = string.Format(“{0} {1}”,NavigationUri.DataEntryEditStaff,“?staffcode = {”+ staffListingModel.StaffCode +“}”);

和XAML看起来

HyperlinkBut​​ton Content =“{Binding StaffCode,Mode = TwoWay}”NavigateUri =“{Binding HyperlinkNavigationUri}”> HyperlinkBut​​ton

知道怎么做吗?

感谢您的帮助。 穆拉里

1 个答案:

答案 0 :(得分:0)

我不会使用Querystring。 因为你正在使用MVVM Light Toolkit。看看Messenger并利用公众的用户模式。与PRISM Eventaggregator类似。

发送“Staffcode”并订阅每个需要利用它的viewmodel。您也可以发送整个雇员对象。

Messenger.Default.Send(selectedEmployee);

Messenger.Default.Subscribe(本); Messinging请参考此链接: http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx Eventaggregator: http://msdn.microsoft.com/en-us/library/cc707867.aspx

如果深度链接和导航与mvvm结合使用,你必须要有所不同。 ViewModel之间的通信应该通过Messenging完成。 Eventaggregator或Messenger。

希望这会有所帮助......