2012-03-08 21 views
0

私は、ホームアプリケーション画面からどの項目が選択されたかに基づいて、2番目のパノラマページを動的に埋めようとしています。選択に基づいて動的ページを作成するにはどうすればよいですか?

アプリケーションの最初のスタート画面上の項目のテキストで各場合、リストボックスがあります。ユーザがテキスト「foobar」を有するアイテムをタップすると、テンプレートページがロードされ、テンプレートページのタイトルは「foobar」に設定され、この第2のパノラマページは、データが「foobar」に関連するべきであることを知るべきである。

どうすればよいですか?

私は現在、新しいページ(DynamicPage.xaml)に私のメインページのナビゲートを持っています。このナビゲーションは、ListBox_SelectionChangedイベントが発生したときにトリガーされます。 MainPage.xaml.csにあるTitleText変数へのDynampicPage.xaml Bindingのタイトルテキストがあります。しかし、私がこれを行うとき、DynamicPage.xamlのタイトルはtitleText変数の私の初期化値に設定されていますが、ページに移動する前にこの変数を更新しています。

誰もが、私はWP7プラットフォーム上だけで初心者ですと私は非常に感謝されるいくつかの助けを提供することができます。ありがとう!

答えて

1

TitleTextプロパティが依存プロパティである場合、またはMainPageがINotifyPropertyChangedインターフェイスを実装している場合に、そのプロパティの1つが変更されたときにUIに通知できるように、タイトルに使用するバインディングが更新されます。

http://windowsphonegeek.com/articles/All-about-Dependency-Properties-in-Silverlight-for-WP7

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.95).aspx

しかし、私は、これはあなたがこれを達成するための最良の方法ではないと思います。今のところはもっと良い方法は、リストボックスの中に、メインページのコンストラクターのロード中に、静的クラスのどこかにこれらのデータを、あなたのデータを格納することで、ユーザーが項目を選択すると、このような2番目のページにユーザーをナビゲート:

あなたは、このように移動すると
NavigationService.Navigate(new Uri("/DynamicPage.xaml?Item=" + selectedItem.Id, UriKind.Relative)); 

DynamicPageの新しいインスタンスが作成され、OnNavigatedTo方法であなたは、ナビゲーションパラメータにアクセスすることができ、選択したデータを使用してページを読み込みます。例:

<controls:Panorama x:Name="MyPanorama" Title="TitleHere">...</controls:Panorama> 

Item selectedItem = StaticData.GetItem(NavigationContext.QueryString["Item"]); 
MyPanorama.Title = selectedItem.Name.ToUpper(); 
Description.Text = selectedItem.Description; 

このようにして、セカンダリタイルとトースト通知を使用して、アプリケーションの特定のコンテンツを直接指すことができます。

ナビゲーションを理解するには、Model-View-ViewModelというパターンを使用してください。これは主にバインディングでこれらの問題を解決することですが、信頼してください。

+0

ご返信ありがとうございます。 DynamicPage.xaml.csファイルのOnNavigatedメソッドを使用してデータを渡すことはできますが、エミュレータでレンダリングされたときにそのページに表示されるタイトルはどのように更新できますか? ページのDynamicPage.xaml.csファイルから直接XAMLで定義されたページタイトルやその他の機能を設定する方法はありますか? DynamicPage.xaml.csで定義された変数に、マークアップを簡単にバインドできますか? – TheSteak

+0

xamlで定義されたコントロールには、x:Name属性で指定された名前でアクセスできます。私はこれを示すために私の答えを更新しました。お役に立てれば! –

関連する問題