2016-07-12 6 views
0

私はMainPage.xamlを2つの部分に分割しました。左の部分には新しいページで右の部分を変更するコマンドを与えるいくつかのボタンがあります。そこで私は元のページを3つ作成しました。 RightPage1,RightPage2およびRightPage3。問題は、RightPage1、2または3の操作を実行した後、左側の部分にデータを表示することです。 この方法を実行するには、いくつかのパターンを実行する必要がありますか?コードの背後で直接行うことができますか?ユニバーサルウィンドウアプリケーションは、あるページから別のページにデータを送信します

私が調査したのは、そのページに移動してデータをパラメータで送信するという解決策でした。しかし、もう一度ページを開くことは望ましくありません。なぜなら、既に開いているのはMainPageです。この状況を解決するために私を助けてください。

RightPage 1では、Submit ClickイベントでMainPage.xamlの左の部分にTextBlocklblClassNameにメッセージを表示したいとします。

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> 

答えて

1

私はコードビハインドで直接行うことができると思います。例:

HomePage.xamlのコードビハインドでは、HomePageを表すHomePageの静的フィールドを定義し、TextBlockのテキストを変更するパブリックメソッドを追加できます。

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; 
    } 
} 

その後でイベントをクリックして送信、私たちはメッセージを表示するようにChangeMessageメソッドを呼び出すことができます。

private void btnSumbit_Click(object sender, RoutedEventArgs e) 
{ 
    HomePage.Home?.ChangeMessage("The message you want to show"); 
} 
+0

ありがとう、私はこのようにすることができますが、私はtextMessageを表示するだけではありません。私の問題は2つのViewModelと1つのモデルがあるようなものなので、ViewModelのいずれかで行われた両方のビューの変更を表示したい。私は答えを探して、更新されたモデルを使用しているすべてのViewModelsを更新する1つのDataServiceを作成する必要があることに気付きました。しかし、私は同じものを実装するための記事を取得していない。 –

+0

私はそれが唯一の方法であるかどうか分からない、他の方法があれば、助けてください。 –

+0

@AnkitSaini MVVMパターンを使用している場合は、答えが異なる場合があります。 ViewModelsとModelがどのように実装され、達成したいのかなど、MVVMパターンの詳細について新しい質問をすることをお勧めします。偽の日付を使うことができます。それはあなたの質問を理解しやすくし、より良い答えを得ることができます。 –

関連する問題