-
[WPF] 서브 윈도우, 페이지에서 데이터 받아오기WPF 2023. 7. 25. 17:00728x90
안녕하세요.
오랜만에 WPF관련 글로 찾아왔습니다. 요즘은 JPA관련 강의를 듣느라 WPF를 신경 쓸일이 잘 없었네요.
그럼에도 열심히 WPF관련 글을 올릴 예정입니다. 헤헤
오늘 기록할 내용은 WPF기준 메인 윈도우에서 서브 윈도우를 열고
서브 윈도우내 데이터를 메인윈도우로 가져오는 방법에 대해서 기록해보겠습니다.
사실... 그냥 static 놓고 썼었는데 같은 팀의 주임님이 좋은 방법을 알려주셔서 기록해 놓습니다.
(Binding까지 하기에는 제가 게으르기도하구... 응용이 충분히 가능하기에 Behind코드로 진행합니다.)
먼저 MainWinodw와 MainWindow가 호출할 SubWindow를 추가하겠습니다.
MainWindow.xaml
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Content="새 창 열기" Click="OpenSubWindow"/> <StackPanel Orientation="Horizontal"> <Label Content="폼에서 불러온 결과: "/> <TextBlock Width="200" Name="mainText"/> </StackPanel> </StackPanel>
정말 간단한 SubWindow를 호출할 버튼, 그리고 결과를 보여줄 TextBlock의 구성입니다.
다음은 SubWindow입니다.
SubWindow.xaml
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox Width="100" Name="subText"/> <Button Content="확인" Click="CloseSubWindow"/> </StackPanel>
정말 간단합니다.
문장을 입력하기위한 TextBox, 이벤트 발생을 위해 확인 Button을 추가했습니다.
이제 각각의 내부를 보겠습니다.
MainWindow.cs
private void OpenSubWindow(object sender, RoutedEventArgs e) { SubWindow window = new SubWindow(); window.SubWindowCall += ShowText; window.ShowDialog(); } private void ShowText(SubWindow sender) { mainText.Text = ""; mainText.Text = sender.subText.Text.ToString(); }
- 핵심이 되는 두 부분만 기록했습니다.
① OpenSubWindow
- ShowDialog를 하며 SubWindow를 호출합니다.
- 그리고 SubWidow내의 이벤트인 SubWindowCall 에 ShowText 를 연결합니다.
②ShowText
- SubWindow에서 호출하면 받아오는 부분입니다.
- sender를 통해서 데이터를 받아올 예정입니다.
SubWindow.cs
- ShowDialog를 통해 SubWindow를 호출합니다.
public event SubWindowDelegate SubWindowCall; public delegate void SubWindowDelegate(SubWindow sender); public SubWindow() { InitializeComponent(); } private void CloseSubWindow(object sender, RoutedEventArgs e) { if(SubWindowCall!=null) { SubWindowCall(this); } }
- Delegate를 통해 함수를 변수로 넘겨줍니다.
- CloseWindow 즉 확인 창을 눌렀을때 SubWindowCall이 Null값이 아니라면 ShowText로 갑니다.
결과 이렇게 보시면 되겠습니다.
event, delegate 아직 제대로 알지 못해 설명이 너무나도 나약하네요.
사용법만 익히시고 추가 설명이 제가 공부하면서 채워나가도록 해야겠습니다.
감사합니다. :D
'WPF' 카테고리의 다른 글
[WPF] DataGrid Scroll시 체크박스 해제되는 에러 (2) 2023.05.12 [WPF] ViewModel에서 this.Close()구현 (0) 2022.05.23 [WPF] 타이틀 바 만들기_닫기, 최소화, 사이즈 조절버튼(1) (0) 2022.04.25 [WPF] IP Address Mask Control 커스텀 이벤트 수정 (0) 2021.12.28 [WPF] IP Address Mask Control 커스텀 이벤트 추가 (0) 2021.12.20