일단 NavigationService 을 이용해서 데이터 넘기는법부터 ㄱㄱ
데이터를 주고 받는데 사용되는 Person
namespace TestWpfBrowserApplication { public class Person { private string _Name; public string Name { get { return _Name; } set { _Name = value; } } private string _Age; public string Age { get { return _Age; } set { _Age = value; } } } }
NavigationService으로 페이지 이동
Page1.xaml 에서 “회원정보입력으로 이동”을 누르면 Page2.xaml로 이동한다.
page2에서 받은값을 돌려주고 있다.
Page1.xaml
namespace TestWpfBrowserApplication { /// <summary> /// Page1.xaml에 대한 상호 작용 논리 /// </summary> public partial class Page1 : Page { public Page1() { InitializeComponent(); } public Page1(Person p) : this() { this.label1.Content = p.Name; label2.Content = p.Age; } private void button1_Click(object sender, RoutedEventArgs e) { //PageFunction1 page = new PageFunction1(); //page.Return += new ReturnEventHandler<Person>(page_Return); Page2 p2 = new Page2(); this.NavigationService.Navigate(p2); } void page_Return(object sender, ReturnEventArgs<Person> e) { //결과값을 뿌려주고 있다. //Person person = e.Result as Person; //this.label1.Content = person.Name; //label2.Content = person.Age; } } }
Page2.xaml
namespace TestWpfBrowserApplication { /// <summary> /// Page2.xaml에 대한 상호 작용 논리 /// </summary> public partial class Page2 : Page { public Page2() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { Person person = new Person() { Age = this.txtAge.Text, Name = this.txtName.Text }; Page1 p1 = new Page1(person); this.NavigationService.Navigate(p1); } } }
전반적으로 NavigationService를 이용해서 간단히 페이지를 이동할 수 있다
private void button1_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Page2());
}
하지만 위와 같은 방법은 매번 페이지를 생성하기 때문에 데이터관리가 까다롭다
그래서 데이터관리를 하면서 이동 할 수 있는 PageFunction 를 이용한다.
회원정보를 입력으로 이동 클릭하면 PageFunction1.xaml 로 이동한다
입력완료를 누르면 다시 Page1.xaml 으로 돌아간다 이때 Person 데이터를 가지고 돌아간다
받아온 결과값을 뿌려주고 있다
Page1.xaml
namespace TestWpfBrowserApplication { /// <summary> /// Page1.xaml에 대한 상호 작용 논리 /// </summary> public partial class Page1 : Page { public Page1() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { PageFunction1 page = new PageFunction1(); page.Return += new ReturnEventHandler<Person>(page_Return); this.NavigationService.Navigate(page); } void page_Return(object sender, ReturnEventArgs<Person> e) { //결과값을 뿌려주고 있다. Person person = e.Result as Person; this.label1.Content = person.Name; label2.Content = person.Age; } } }
PageFunction1.xaml
Person 형식이므로
TypeArguments를 맞춰준다.
namespace TestWpfBrowserApplication { /// <summary> /// PageFunction1.xaml에 대한 상호 작용 논리 /// </summary> public partial class PageFunction1 : PageFunction<Person> { public PageFunction1() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { Person person = new Person() { Age=this.txtAge.Text , Name = this.txtName.Text }; ReturnEventArgs<Person> returnObject = new ReturnEventArgs<Person>(person); OnReturn(returnObject); } } }
로그인같은 단발성 UI 는 걍 NavigationService을 이용해서 처리하고
처리하고 회원가입같은 정보를 받아와야하는 경우에 PageFunction을 사용하면 좋겠다
물론
this.NavigationService.Navigate(new Page1(Person)); // 이렇게 해도 뭐…. ㅋ
참고 URL
http://msdn.microsoft.com/ko-kr/library/ms741843(v=VS.100).aspx
'WPF' 카테고리의 다른 글
[VisualTreeHelper] 부모컨트롤 찾기 / 자식컨트롤 찾기 (0) | 2010.09.16 |
---|---|
[DependencyObject.GetValue] 사용하기 (0) | 2010.09.16 |
[Blend4 / DataGrid / DataTemplate / CellEditingTemplate / Edit] 데이터그리드 편집모드 사용하기 (0) | 2010.09.16 |
StaticResource 와 DynamicResource 의 차이 (0) | 2010.09.15 |
[StringFormat] 초간단 날짜 표시방법변경 (0) | 2010.09.01 |
[Canvas] 캔버스안의 컨트롤을 캔버스 가운데 띄우기 (0) | 2010.08.03 |
[DataGridHyperlinkColumn , EventSetter ] DataGridHyperlink 이벤트 처리 (0) | 2010.08.03 |
[WPF ReportViewer] WPF WinForm 리포트뷰 사용하기 (0) | 2010.08.02 |
[WPF Style/FindResource ] 비하인드 코드에서 스타일 먹히기 (0) | 2010.07.30 |
[WPF FileDialog] Image 저장/불러오기/바인딩하기 (0) | 2010.07.19 |