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"];
        }
    }

ビューモデルでクエリ パラメータを取得したいと思います。クエリ パラメータに基づいて、特定の操作を実行します。コンストラクターが呼び出されたときに、以下に示すように「ビュー」にスタッフIDを渡したい

    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

私はクエリ文字列を使いません。MVVMLightToolkitを使用しているためです。メッセンジャーを見て、一般のサブスクライバーパターンを利用してください。PRISMEventaggregatorに似ています。

「スタッフコード」を送信し、それを利用する必要があるすべてのビューモデルでサブスクライブします。従業員オブジェクト全体を送信することもできます。

Messenger.Default.Send(selectedEmployee);

Messenger.Default.Subscribe(this); メッシングについては、次のリンクを参照してください: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。

お役に立てれば...

于 2010-03-27T14:08:53.877 に答える