2012-04-06 13 views
3

すべて、Windows 7 Phoneを初めて使用しています。私の状況は、メインページにScrollViewerがあり、それにはStackPanelがあります。私はStackPanelに複数のサブStackPanel(実行時)を埋め込み、Image Thumbの爪にハイパーリンクとイメージに関するいくつかの基本情報を保持させたいと思います。Windows Phoneで複数のページからコントロールを更新する

これはメインページから行うと良いことですが、このコントロール(メインページにあります)を更新する方法を知りたいのですが、メインページ以外のページから更新します。上記のようなページのコントロールを別のページから更新するためのベストプラクティスとは何かを知りたい。

明らかに他のページに続いページ

PhoneApplicationService.Current.State["yourparam"] = param 
NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative)); 

の間でデータを渡すために、いくつかの方法単に

var k = PhoneApplicationService.Current.State["yourparam"]; 

や他の多くのがあります。しかし、ジェネリックコントロールを別のページから更新するためのベストプラクティスは何ですか?

注:ページ間のデータアクセスとページ渡しについては、多くの質問があります。 How to pass the image value in one xaml page to another xaml page in windows phone 7?

  • Passing image from one page to another windows phone 7
  • 、よりPassing data from page to page

    1. 。これは私が求めていることではありません。

  • 答えて

    3

    あなたの質問が正しく理解されている場合、たとえば、Page2.xamlのような別のページのMainPage.xamlにあるコントロールを更新しようとしています。

    私が知る限り、別のページからページコントロールにアクセスする方法はありません。これは、私が考えることができる場合は不要です。

    あなたがしようとしていることを達成するために使用される方法は、通常、(ボタンを押すなどの)アクションをトリガし、コントロールを更新しようとしているページにパラメータを渡すことによって行われます。また、そのページのonnavigatedtoイベント(MVVMパターンを使用している場合はviewmodelコンストラクタ)で、渡されたパラメータに基づいてコントロールを更新します。

    あなたの更新がデータに基づいている場合、ベストプラクティスは、観測可能なコレクションまたはINotifyPropertyChanged(基本的にそのプロパティの1つがuiに変更されたことを通知できる任意のオブジェクト)を拡張するオブジェクトをバインドし、渡されるパラメーターに基づいています。

    これらの2つのページが何らかの形で同時に表示され、それらの間にナビゲーションが必要ない場合(ポップアップやスライディングメニューなど)、ポップアップに表示されているページをusercontrol、 this.Parentによって親のコントロールに到達します。

    あなたのアプリの流れについてもっと詳しく説明しておけば、私はもっと役に立ちます。

    +0

    これはすでに大規模に役立っています。あなたは最初の段落で正しいと思います。私は多くの3/4ページを持つ基本的なWindowsの電話アプリケーションを持っています。メインページには、アプリケーションの他のページに/から作成される写真や情報が含まれています。私はIsolatedStorageに表示したい情報を保存して情報を取得し、復元されたときにそこからメインページを取り込むことができると思います。私はMVVMのパターンをチェックアウトすることを確信します、私はそれを聞いたことがありますが、私は非常にあなたの時間のおかげで、窓の電話の開発に新しいです... – MoonKnight

    +1

    あなたのメインページによってアクセスされるデータを保持することができますグローバルな静的クラスであり、メインページに戻ると、そのクラスの写真やその他の必要なデータを取得し、UIを更新します。これは非常に洗練された解決策ではありませんが、仕事を完了させます。 MVVMは、小さなアプリや1〜2人のような非常に小さなチームでは、不必要に複雑になることがあります。間違いなくそれを学ぶことができますが、あなたがUiのデザイナーとコードビハインドの開発者と別々に作業していないのであれば、おそらくMVVMを使う必要はありません。 – omerkirk

    +0

    アドバイスをいただきありがとうございます... – MoonKnight

    2

    MVVMパターンは良い方法です。小規模なチームにとってMVVMはあまりに複雑すぎるとは言えませんが、MVVMの目的はSilverlightやWPFコードをデカップリングすることです。Silverlightページのコードビハインドを使用してデータに直接アクセスすると、コード内の結合が作成され、技術的負債が発生します。デベロッパーであれ100人であれ、UIがデータクラスと結合されている場合は、データクラスを変更する必要がある場合は、それらのクラスを使用するすべてのUI要素を変更する必要があります。これは時間がかかり、アプリケーションを変更するのが難しくなります。

    MVVMはUI(ビュー)がデータ(モデル)について何も知らないようにします。 ViewModelは、UIをバインドすることができ、UIでモデルに永続化する必要のあるイベントを管理するコードと、ビューで表現する必要があるモデルの変更点のコードです。このため、イベントを処理します。コード内に必要なように聞こえるのは、コードビハインドに存在する可能性のあるイベントで、データが変更されたときにビューにバインドされたビューを更新できます。 2つのページがある場合は、いずれかのページのイベントがViewModelに送信され、必要に応じてモデル(データ)が変更され、ViewModelに戻されます。 ViewModelは、そのデータにバインドされたUI要素(Views)を更新します。

    MVVMデザインパターンを実装する方法の実際のデモは、here です。このユーザーは、Silverlightのような典型的なWPFアプリケーションを使用します。このアプリケーションでは、UIコードビヘイビアーがデータに直接アクセスするイベントハンドラーを実装し、MVVMパターンを使用してそれをリファクタリングします。

    関連する問題