ナビゲーションスタイルのWPFアプリケーション(XBAPではなくNavigationWindow)のコンテキストでは:
ハイパーリンクのNavigateUriに、パスデータやクエリ文字列などの追加のパラメーターを含めることはできますか?たとえば、NavigateUriを/Product.xaml/123
または/Product.xaml?id=123
に設定し、Product.xamlページでパラメーターが123
?
ナビゲーションスタイルのWPFアプリケーション(XBAPではなくNavigationWindow)のコンテキストでは:
ハイパーリンクのNavigateUriに、パスデータやクエリ文字列などの追加のパラメーターを含めることはできますか?たとえば、NavigateUriを/Product.xaml/123
または/Product.xaml?id=123
に設定し、Product.xamlページでパラメーターが123
?
あなたはこれを行うことができます。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 オブジェクトをパラメーターとして受け取ることを前提としています。これにより、文字列を解析することなく、ページ間でより豊富な情報を渡すことができます。
もう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#から来た人にとってはよりユーザーフレンドリーなようです。
Customer selectedCustomer = (Customer)listBox.SelectedItem;
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
Paul Stovell あなたの提案を使用すると、インスタンス全体がジャーナルに残るため、ページがガベージ コレクションされなくなると思います。