2016년 11월 17일 목요일

[C#교육,자마린/Xamarin교육,앱개발교육학원_탑크리에듀](C#,자마린강좌)네비게이션시 데이터 넘기는 방법(Passing Data when Navigating)_자마린추천학원교육,닷넷강좌

(C#,자마린강좌)네비게이션시 데이터 넘기는 방법(Passing Data when Navigating)_자마린추천학원교육,닷넷강좌 
Passing Data when Navigating
n  한페이지에서 다른 페이지로 데이터를 넘겨야 하는 경우가 있는데 페이지의 생성자를 통해 넘기거나 새 페이지의 BindingContext에 데이터를 설정하는 방법이 있다.
n  생성자를 통해 넘기기

public App ()
{
  MainPage = new NavigationPage (new MainPage (DateTime.Now.ToString ("u")));
}

데이터를 받는 MainPage에서는 다음과 같이 생성자에서 처리하면 된다.
public MainPage (string date)
{
  InitializeComponent ();
  dateLabel.Text = date;
}


n  BindingContext를 통해 넘기기

아래 코드는 SecondPage의 BindingContext에 Contect 인스턴스를 세팅 했다.
async void OnNavigateButtonClicked (object sender, EventArgs e)
{
  var contact = new Contact {
    Name = "Jane Doe",
    Age = 30,
    Occupation = "Developer",
    Country = "USA"
  };

  var secondPage = new SecondPage ();
  secondPage.BindingContext = contact;
  await Navigation.PushAsync (secondPage);
}

아래는 SecondPage에서 넘어오는 Contact 데이터를 출력하기 위해서 XAML코드를 통해 처리한 예문이다.

             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="PassingData.SecondPage"
             Title="Second Page">
    <ContentPage.Content>
        <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
            <StackLayout Orientation="Horizontal">
                <Label Text="Name:" HorizontalOptions="FillAndExpand" />
               <Label Text="{Binding Name}" FontSize="Medium" FontAttributes="Bold" />
            </StackLayout>
            ...
            <Button x:Name="navigateButton" Text="Previous Page" Clicked="OnNavigateButtonClicked" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

C#코드로 BindingContext의 데이터를 받기 위해서는 다음과 같이 하면 된다.

public class SecondPageCS : ContentPage
{
  public SecondPageCS ()
  {
    var nameLabel = new Label {
      FontSize = Device.GetNamedSize (NamedSize.Medium, typeof(Label)),
      FontAttributes = FontAttributes.Bold
    };
    nameLabel.SetBinding (Label.TextProperty, "Name");
    ...
    var navigateButton = new Button { Text = "Previous Page" };
    navigateButton.Clicked += OnNavigateButtonClicked;

    Padding = new Thickness (0, Device.OnPlatform (20, 0, 0), 0, 0);
    Content = new StackLayout {
      HorizontalOptions = LayoutOptions.Center,
      VerticalOptions = LayoutOptions.Center,
      Children = {
        new StackLayout {
          Orientation = StackOrientation.Horizontal,
          Children = {
            new Label{ Text = "Name:", FontSize = Device.GetNamedSize (NamedSize.Medium, typeof(Label)), HorizontalOptions = LayoutOptions.FillAndExpand },
            nameLabel
          }
        },
        ...
        navigateButton
      }
    };
  }

  async void OnNavigateButtonClicked (object sender, EventArgs e)
  {
    await Navigation.PopAsync ();
  }
}


댓글 없음:

댓글 쓰기