(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코드를 통해 처리한 예문이다.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 ();
}
}
댓글 없음:
댓글 쓰기