2016-07-12 9 views
0

Ich hatte die MainPage.xaml in zwei Teile unterteilt. Der linke Teil hat einige Knöpfe, die den Befehl geben, den rechten Teil mit einer neuen Seite zu ändern. Also habe ich drei richtige Seiten für ex erstellt. RightPage1, RightPage2 und RightPage3. Das Problem ist, dass ich Daten auf dem linken Teil nach den durchgeführten Operationen auf RightPage1, 2 oder 3 zeigen möchte. Sollte ich ein Muster folgen, um diesen Ansatz zu erfüllen? oder können wir es direkt im Code hinterher tun?Universal Windows App, um Daten von einer Seite an eine andere zu senden

Alles, was ich recherchiert mir Lösung geben zu dieser Seite zu navigieren und die Daten im Parameter zu senden. Aber ich möchte die Seite nicht mehr öffnen, da sie bereits auf der linken Seite von MainPage geöffnet ist. Bitte helfen Sie mir, diese Situation zu lösen.

In RightPage 1, auf Submit Click Event Ich möchte eine Nachricht in MainPage.xaml 's linken Teil in TextBlock lblClassName zeigen.

HomePage.xaml 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="5*"/> 
     <ColumnDefinition Width="3*"/> 
    </Grid.ColumnDefinitions> 
    <RelativePanel> 
     <Button x:Name="btn1" 
       Content="Button 1" 
       Height="50" Width="100" Margin="0,30,0,0" 
       RelativePanel.AlignHorizontalCenterWithPanel="True" 
       Click="btn1_Click"/> 
     <Button x:Name="btn2" 
       Content="Button 2" 
       Height="50" Width="100" Margin="0,30,0,0" 
       RelativePanel.AlignHorizontalCenterWithPanel="True" 
       RelativePanel.Below="btn1" 
       Click="btn2_Click"/> 
     <Button x:Name="btn3" 
       Content="Button 3" 
       Height="50" Width="100" Margin="0,30,0,0" 
       RelativePanel.AlignHorizontalCenterWithPanel="True" 
       RelativePanel.Below="btn2" 
       Click="btn3_Click"/> 

     <TextBlock x:Name="lblWrite" 
        Text="Write something : " 
        Visibility="Visible" 
        RelativePanel.Below="btn3"/> 
     <TextBox x:Name="txtWrite" 
       Height="50" Width="150" 
       Visibility="Collapsed" 
       RelativePanel.Below="lblWrite"/> 
     <Button x:Name="btn3_1" 
       Height="50" Width="100" 
       Visibility="Collapsed" 
       Content="Send" 
       RelativePanel.Below="txtWrite"/> 

     <TextBlock x:Name="lblClassName"/> 

    </RelativePanel> 
    <Frame x:Name="RightPage" 
      Grid.Column="1"/> 
</Grid> 


RightPage1.xaml 

<Grid Background="Beige"> 
     <TextBlock x:Name="heading" 
        Text="Teacher Module" 
        RelativePanel.AlignHorizontalCenterWithPanel="True"/> 
     <TextBlock x:Name="lblName" 
        Text="Name" Margin="0,30,0,0" 
        RelativePanel.AlignHorizontalCenterWithPanel="True" 
        RelativePanel.Below="heading"/> 
     <TextBox x:Name="txtName" 
       Height="30" Width="150" Margin="30,30,0,0" 
       RelativePanel.RightOf="lblName" 
       RelativePanel.Below="heading"/> 
     <TextBlock x:Name="lblClass" 
        Text="Class" Margin="0,30,0,0" 
        RelativePanel.AlignHorizontalCenterWithPanel="True" 
        RelativePanel.Below="lblName"/> 
     <TextBox x:Name="txtClass" 
       Height="30" Width="150" Margin="30,10,0,0" 
       RelativePanel.RightOf="lblClass" 
       RelativePanel.Below="txtName"/> 
     <Button x:Name="btnSumbit" 
       Content="Submit" 
       Height="50" Width="100" Margin="0,30,0,0" 
       RelativePanel.AlignHorizontalCenterWithPanel="True" 
       RelativePanel.Below="lblClass"/> 
     <Button x:Name="btnCancel" 
       Content="Cancel" 
       Height="50" Width="100" Margin="30,30,0,0" 
       RelativePanel.AlignHorizontalCenterWithPanel="True" 
       RelativePanel.Below="lblClass" 
       RelativePanel.RightOf="btnSumbit"/> 

     <TextBlock x:Name="lblResult" 
        Margin="0,30,0,0" 
        RelativePanel.Below="btnSumbit"/> 
    </RelativePanel> 
</Grid> 

Antwort

1

Ich denke, wir können es direkt in Code hinter. Zum Beispiel:

Im Code-behind von HomePage.xaml, können wir ein statisches Feld in HomePage definieren, die die HomePage selbst darstellen und eine öffentliche Methode hinzufügen TextBlock ‚s Text zu ändern.

public sealed partial class HomePage : Page 
{ 
    //define a static field represent the HomePage itself 
    public static HomePage Home; 

    public HomePage() 
    { 
     this.InitializeComponent(); 
     //initialize Home field 
     Home = this; 
    } 

    ... 

    /// <summary> 
    /// Show some message in TextBlock lblClassName 
    /// </summary> 
    /// <param name="message">message to been shown</param> 
    public void ChangeMessage(string message) 
    { 
     this.lblClassName.Text = message; 
    } 
} 

Dann Ereignis Senden Sie können wir ChangeMessage Methode aufrufen, um die Nachricht zu zeigen.

+0

Dank Jay, kann ich auf diese Weise tun, aber ich will nicht nur textMessage zeigen. Mein Problem ist, dass ich zwei ViewModels und ein Model habe. Daher möchte ich Änderungen an beiden Views in einem der Viewmodels anzeigen. Ich habe nach den Antworten gesucht und bin zu dem Punkt gekommen, dass ich einen DataService erstellen muss, der alle Viewmodels aktualisiert, die das aktualisierte Model verwenden. Aber ich habe keinen Artikel bekommen, um dasselbe zu implementieren. –

+0

Ich bin mir nicht sicher, ob es der einzige Weg ist, wenn es einen anderen Weg gibt, bitte helfen Sie mir. –

+0

@AnkitSaini Wenn Sie MVVM-Muster verwenden, ist die Antwort möglicherweise anders. Ich schlage vor, dass Sie eine neue Frage mit den Details Ihres MVVM-Musters stellen, z. B. wie Ihre ViewModels und Ihr Modell implementiert wurden und was Sie erreichen möchten. Sie können ein falsches Datum verwenden. Es wird Ihre Frage leichter verständlich machen und Sie können viel bessere Antworten erhalten. –

Verwandte Themen