2016-07-19 30 views
0

私はXAMLNavigation sampleに基づく単純なアプリケーションを開発中です。私はAppShell.xamlファイルを変更して、設定ボタンをクリックすると、ユーザーをSettingPageに移動させます。UWPページ間のパラメータの受け渡し

<Button x:Name="SettingsNavPaneButton" 
         Grid.Row="2" 
         Grid.Column="2" 
         Style="{StaticResource SplitViewPaneButtonStyle}" 
         Content="&#xE713;" 
         Click="SettingsNavPaneButton_Clicked" 
         AutomationProperties.Name="Settings" 
         ToolTipService.ToolTip="Settings"/> 

次はSettingPageの内容です:このページで

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:SettlerBalancer.Views" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"> 

<Grid Height="200" Width="Auto" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="24,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <CheckBox x:Name="tileBalance" Grid.Row="0" Content="Text Tile" HorizontalAlignment="Left" Margin="0,0,0,-28.8" Grid.RowSpan="3" VerticalAlignment="Top" IsChecked="True" Click="tileBalance_Click"/> 
    <CheckBox x:Name="portBalance" Grid.Row="1" Content="Text port" HorizontalAlignment="Left" Margin="0,0,0,-28.8" Grid.RowSpan="3" VerticalAlignment="Top" IsChecked="True" Click="portBalance_Click"/> 
</Grid> 

、私はBasicPageまたはLandingPageに渡すパラメータです2つのチェックボックスを持っています。

私の理解では、this questionのようにOnNavigationメソッドをオーバーライドすることで、ページ間でパラメータを渡すことができます。

Frame.Navigate(typeof(BasicPage), parameters); 
Frame.Navigate(typeof(LandingPage), parameters); 

しかし、私の場合には、BasicPageとランディングページが実際に分割ビューパネル内のページが、フレームではなく、彼らができるだけ:これはSettingPage.xaml.csに意味、私はこのようなパラメータを渡す必要がありますNavigationListViewでアクセスできます。 SettingPageはsplitviewの一部ですが、NavigationListViewの一部ではありません。したがって、SettingPageからNavigationListViewを使用してナビゲートするときに、どのページ(BasicPageまたはLandingPage)に移動するのかわかりません。

答えて

2

をシンプルに保つと、静的なアプリケーション設定クラスを作成していません。独自の設定クラスを作成する必要はありません。 URLがあなたに役立つ場合があります。

https://msdn.microsoft.com/en-us/windows/uwp/app-settings/store-and-retrieve-app-data

そして、基本的に

Frame.Navigate(typeof(BasicPage), parameters); 

は、ナビゲーションメソッドのパラメータは、「ナビゲーション」の目的に適している - などのブラウジングURL、などのように ので、ナビゲーション方法は、以下の機能を持っています保存/復元ナビゲーションスタック。アプリケーション設定値を保存/復元するのは無駄です。 「ナビゲーション」とは関係ありません:)

+0

意味があります。私が渡したいこれらのパラメータは、アプリケーション設定値です。 – v4r

1

理由だけではなく、あなたが設定を保存/復元するWindows.Storage.ApplicationData.Current.LocalSettingsクラスを使用することができ

public static ApplicationSettings{ 
    private static Dictionary<string,object> _settingsCache = 
              new Dictionary<string,object>(); 

    public static void AddItem(string itemKey, object itemValue){ 
       _settingsCache.add(itemKey,itemValue); 
    } 

    public static object GetItem(string itemKey){ 
       _settingsCache[itemKey]; 
    } 
} 
+0

このキャッシュは、それがグローバル変数と同じですか? – v4r

+1

@ v4rええ。私がやることは、例外処理やストレージへの書き込みなどのロジックを含むApplicationServicesクラスがあることです。 –

-1

次のように他のページにパラメータを渡します。

プライベートボイドmyclick(オブジェクト送信者、RoutedEventArgs e)の

{

show s = new show() { name = name.Text, desig = desig.Text, sal = int.Parse(sal.Text) }; 

    this.Frame.Navigate(typeof(BlankPage1), s); 

}

ターゲット形態

保護オーバーライドボイドOnNavigatedToにパラメータの値を取得するコードの下

( NavigationEventArgs e)

{

 show s =(show) e.Parameter; 

     name.Text = "Your Name is: "+ s.name; 

     desig.Text = "your Designation is: "+ s.desig; 

     sal.Text = "Your Salary is: "+ s.sal.ToString(); 

}

関連する問題