3

すべて、私はWindows7Phoneを初めて使用します。私の状況では、メインページにが含まれています。メインページには。が含まれてScrollViewerStackPanelます。StackPanelこれに(実行時に)複数のサブを入力StackPanelして、画像のサムネイルにハイパーリンクと画像に関するいくつかの基本情報を保持したいと思います。

これは、メインページからこれを行う場合はすべて問題ありませんが、このコントロール(メインページにあります)を更新する方法を知りたいのですが、メインページ以外のページからです。別のページからページのコントロール(上記で概説したような)を更新するためのベストプラクティスと見なされるものを知りたいです。

明らかに、ページ間でデータを渡す方法はいくつかあります

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

その後、他のページで単に

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

と他の多く。しかし、別のページから汎用コントロールを更新するためのベストプラクティスは何ですか?

注:データアクセスとページ間の受け渡しについては多くの質問があります。

  1. ページからページへのデータの受け渡し
  2. Windows Phone 7のあるxamlページの画像値を別のxamlページに渡す方法は?
  3. あるページから別のWindowsPhone7に画像を渡す

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

4

2 に答える 2

3

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

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

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

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

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

アプリのフローについて詳しく教えていただければ、さらに参考になります。

于 2012-04-06T11:18:45.437 に答える
2

MVVMパターンは良い方法です。MVVMが小規模なチームにとって複雑すぎると言うのは正確ではありません。MVVMの目的は、SilverlightまたはWPFコードを分離することです。Silverlightページのコードビハインドを使用してデータに直接アクセスすると、コードに結合が生じ、技術的負債が発生します。1人の開発者でも100人でも、UIがデータクラスと結合されている場合、データクラスを変更する必要がある場合は、それらのクラスを使用するすべてのUI要素に変更を加える必要があります。これには時間がかかり、アプリケーションの変更がより困難になります。

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

ここには、MVVMデザインパターンを実装する方法の非常に優れたデモンストレーションがあります 。その男は、典型的なWPFアプリケーション(Silverlightのような)を実行します。このアプリケーションでは、背後にあるUIコードが、データに直接アクセスするイベントハンドラーを実装し、MVVMパターンを使用してリファクタリングします。

于 2012-04-06T18:18:19.310 に答える