1

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

我在我的 LOB 应用程序中使用 SL3 导航框架。我目前使用 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"];
        }
    }

我想在我的视图模型中检索查询参数,并根据查询参数执行某些操作。当构造函数被调用时,我希望“视图”传递 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

知道怎么做吗?

谢谢您的帮助。穆拉里

4

1 回答 1

0

我不会使用查询字符串。因为您使用的是 MVVM Light Toolkit。查看 Messenger 并利用公共订阅者模式。类似于 PRISM Eventtaggregator。

发送“Staffcode”并订阅每个需要利用它的视图模型。您还可以发送整个员工对象。

Messenger.Default.Send(selectedEmployee);

Messenger.Default.Subscribe(this); 参考此链接进行混乱: http: //blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx Eventtaggregator:http: //msdn.microsoft.com/ zh-CN/图书馆/cc707867.aspx

如果深度链接和导航与 mvvm 结合使用,您必须考虑不同。ViewModel 之间的通信应该通过消息传递来完成。事件聚合器或信使。

希望这可以帮助...

于 2010-03-27T14:08:53.877 回答