2012-04-06 3 views
3

Alles, ich bin neu bei Windows 7 Phone. Meine Situation ist, dass ich eine Hauptseite habe, die eine ScrollViewer enthält, die wiederum eine StackPanel beherbergt. Ich möchte dieses StackPanel mit mehreren Sub-StackPanel s (zur Laufzeit) befüllen, die einen Image Thumb Nagel einen Hyperlink und einige grundlegende Informationen über das Bild halten sollen.Steuerelemente von mehreren Seiten auf Windows Phone aktualisieren

Das ist alles gut, wenn ich dies von der Hauptseite aus mache, aber ich möchte wissen, wie man dieses Steuerelement aktualisiert (das auf der Hauptseite ist), aber von jeder Seite außer der Hauptseite. Ich würde gerne wissen, was als Best Practice für das Aktualisieren der Kontrolle einer Seite (wie oben beschrieben) von einer anderen Seite betrachtet wird.

Offensichtlich gibt es eine Reihe von Möglichkeiten, um Daten zwischen den Seiten

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

dann in anderen Seite einfach

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

und viele andere zu übergeben. Aber Was ist die beste Vorgehensweise zum Aktualisieren eines generischen Steuerelements von einer anderen Seite?

Hinweis: Es gibt viele Fragen zum Datenzugriff und zum Weiterleiten zwischen Seiten.

  1. Passing data from page to page
  2. How to pass the image value in one xaml page to another xaml page in windows phone 7?
  3. Passing image from one page to another windows phone 7

und vieles mehr. Das ist nicht was ich verlange.

Antwort

3

Wenn ich Ihre Frage richtig verstehe, versuchen Sie, ein Steuerelement zu aktualisieren, das beispielsweise MainPage.xaml von einer anderen Seite beispielsweise Page2.xaml ist.

Soweit ich weiß, gibt es keine Möglichkeit, eine Seitensteuerelemente von einer anderen Seite zu erreichen, und das scheint für die Fälle unnötig, die ich mir vorstellen kann.

Die Methode, die verwendet wird, um das zu erreichen, was Sie versuchen, wird normalerweise durch Auslösen einer Aktion (wie dem Drücken einer Schaltfläche) und Übergeben eines Parameters an die Seite, die Sie versuchen, das Steuerelement zu aktualisieren, durchgeführt. Wenn Sie auf dem Onnavigatedto -Ereignis dieser Seite (oder dem ViewModel-Konstruktor, wenn Sie das MVVM-Muster verwenden) aktualisieren, aktualisieren Sie Ihr Steuerelement basierend auf dem übergebenen Parameter.

Wenn Ihre Aktualisierung auf Daten basiert, empfiehlt es sich, eine beobachtbare Objektgruppe oder ein Objekt zu binden, das INotifyPropertyChanged erweitert (im Prinzip jedes Objekt, das signalisieren kann, dass eine ihrer Eigenschaften in ui geändert wurde) und die Datenbasis ändert auf dem Parameter, der übergeben wird.

Wenn diese zwei Seiten irgendwie gleichzeitig sichtbar sind und keine Navigation zwischen ihnen notwendig ist (wie ein Popup oder ein gleitendes Menü), dann können Sie die Seite, die Sie im Popup anzeigen, und erreiche dadurch die Kontrolle der Eltern.

Ich kann hilfreicher sein, wenn Sie genauere Angaben zum Fluss Ihrer App machen.

+0

Das ist schon massiv hilfreich. Sie haben es in Ihrem ersten Absatz richtig gemacht. Ich habe eine grundlegende Windows Phone-Anwendung, die höchstens 3/4 Seiten haben wird. Die Hauptseite enthält Fotos und Informationen, die auf anderen Seiten der Anwendung erstellt werden. Ich nehme an, ich könnte speichern, was ich in IsolatedStorage anzeigen möchte und die Informationen erhalten und die Hauptseite von dort aus füllen, wenn es wiederhergestellt wird. Ich werde sicher sein, das MVVM-Muster zu überprüfen, ich habe davon gehört, aber ich bin sehr neu in Windows Phone-Entwicklung, danke für Ihre Zeit ... – MoonKnight

+1

Sie können Ihre Daten, die von Ihrer Hauptseite in einem globale statische Klasse und wenn Sie zurück zu Ihrer Hauptseite navigieren, nehmen Sie die Fotos und andere notwendige Daten aus dieser Klasse und aktualisieren Sie Ihre Benutzeroberfläche, die keine sehr elegante Lösung ist, aber es wird die Arbeit erledigt. MVVM ist ein gutes Muster zu lernen, aber für kleine Anwendungen oder sehr kleine Teams wie 1 oder 2 Personen kann es unnötig kompliziert sein. Definitiv lerne es, aber wenn du nicht separat mit einem Designer für ui und einem Entwickler für Codebehind arbeitest, brauchst du wahrscheinlich MVVM nicht zu benutzen. – omerkirk

+0

Vielen Dank für den Rat ... – MoonKnight

2

Das MVVM-Muster wäre ein guter Weg zu gehen. Zu sagen, dass MVVM für kleine Teams zu kompliziert ist, ist nicht genau - der Zweck von MVVM besteht darin, Silverlight- oder WPF-Code zu entkoppeln.Die Verwendung des Codebehinds einer Silverlight-Seite für den direkten Zugriff auf Daten führt zur Kopplung in Ihrem Code und erhöht die technischen Schulden. Unabhängig davon, ob Sie ein Entwickler oder 100 sind, wenn Ihre Benutzeroberfläche mit Ihren Datenklassen gekoppelt ist, müssen Sie, wenn Sie Ihre Datenklassen ändern müssen, Änderungen an jedem Oberflächenelement vornehmen, das diese Klassen verwendet. Dies dauert länger und erschwert die Änderung Ihrer Anwendung.

MVVM macht es so Ihre UI (die Ansicht) weiß nichts über die Daten (Ihr Modell). Das ViewModel ist der Code dazwischen, an den die Benutzeroberfläche binden kann und der Ereignisse in der Benutzeroberfläche verwaltet, die im Modell beibehalten werden müssen, sowie Änderungen im Modell, die in der Ansicht dargestellt werden müssen. Aus diesem Grund behandelt es Ereignisse, und genau so klingt es in Ihrem Code - ein Ereignis, das außerhalb des Codebehinds bestehen kann und das die daran gebundenen Ansichten aktualisieren kann, wenn sich die Daten ändern. Wenn Sie zwei Seiten haben, wird ein Ereignis auf einer der Seiten an das ViewModel gesendet, das bei Bedarf das Modell (Daten) ändert und es an das ViewModel zurückgibt. Das ViewModel würde dann jedes der UI-Elemente (Ansichten) aktualisieren, die an diesen Datenabschnitt gebunden sind.

Es gibt eine wirklich gute Demonstration, wie man das MVVM Entwurfsmuster here einführt. Der Typ geht durch und nimmt eine typische WPF-Anwendung (genau wie Silverlight), bei der das UI-Codebehind Event-Handler implementiert, die direkt auf Daten zugreifen und es mit dem MVVM-Muster umgestalten.