11

ナビゲーションスタイルのWPFアプリケーション(XBAPではなくNavigationWindow)のコンテキストでは:

ハイパーリンクのNavigateUriに、パスデータやクエリ文字列などの追加のパラメーターを含めることはできますか?たとえば、NavigateUriを/Product.xaml/123または/Product.xaml?id=123に設定し、Product.xamlページでパラメーターが123

4

3 に答える 3

18

あなたはこれを行うことができます。http://www.paulstovell.com/wpf-navigationを参照してください。

明らかではありませんが、クエリ文字列データをページに渡し、パスから抽出することができます。たとえば、ハイパーリンクは URI で値を渡すことができます。

<TextBlock>
    <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink>
</TextBlock>

ページが読み込まれると NavigationService.CurrentSource、Uri オブジェクトを返す を介してパラメーターを抽出できます。次に、Uri を調べて値を分離できます。ただし、最も悲惨な状況を除いて、このアプローチには反対することを強くお勧めします。

はるかに優れたアプローチは、パラメーターのオブジェクトを取る NavigationService.Navigate のオーバーロードを使用することです。たとえば、次のようにオブジェクトを自分で初期化できます。

Customer selectedCustomer = (Customer)listBox.SelectedItem;
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));

これは、ページ コンストラクターが Customer オブジェクトをパラメーターとして受け取ることを前提としています。これにより、文字列を解析することなく、ページ間でより豊富な情報を渡すことができます。

于 2009-10-09T15:39:41.887 に答える
0

もう1つの方法は、destinyページにパブリック変数を作成し、get/setプロパティを使用して値を割り当てることです。

ページ上:

private Int32 pMyVar;

public Int32 MyVar
{
   get { return this.pMyVar; }
   set { this.pMyVar = value; }
}

そこに移動するとき:

MyPagePath.PageName NewPage = new MyPagePath.PageName();
NewPage.MyVar = 10;

this.MainFrameName.NavigationService.Navigate(NewPage);

NewPageがロードされると、整数MyVarは10に等しくなります。MainFrameNameは、フレームを操作する場合に使用するフレームですが、そうでない場合でも、navigateコマンドは同じままです。私の意見ですが、そのように追跡する方が簡単で、WPFの前にC#から来た人にとってはよりユーザーフレンドリーなようです。

于 2012-10-08T18:40:09.317 に答える
0
Customer selectedCustomer = (Customer)listBox.SelectedItem; 
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer)); 

Paul Stovell あなたの提案を使用すると、インスタンス全体がジャーナルに残るため、ページがガベージ コレクションされなくなると思います。

于 2010-10-16T18:34:28.427 に答える