기본적인 흐름의 정리입니다.
부모창 ( WPF 윈도우 ) : ParentScreen
자식창 ( WPF윈도우 ) : ChildScreen
ParentScreen
//자식으로부터 받은 결과를 저장
string strFromChild="";
//자식창 인스턴스 생성
var screen = new ChildScreen();
//부모창 자신을 소유자(this)로 설정해서 모달윈도우로(ShowDialog) 자식창 열고 리턴 성공여부를 받음(result)
var result = screen.ShowDialog(this); // This가 없으면 결과값을 받지 못함
if(result==0) // 성공이면
{
//자식 인스턴스 내의 public 멤버(or 프로퍼티)를 받음
strFromChild = screen.strOfChild;
}
ChildScreen
public string strOfChild;
strOfChild = "이것은 자식으로 부터의 문자열입니다.";
this.DialogResult = true; //리턴 성공으로 알림
실제업무에서는 자식창으로부터 단순 문자열이 아니라 뷰 모델을 받아오거나 복잡하게 이용합니다.
자식창을 열때 소유자(this)설정을 하지 않으면 값 받는 부분이 에러가 됩니다.
this.DialogResult = true; 를 명시적으로 지정해주지 않으면 false가 되며, false여도 부모창에서 자식창의 strOfChild취득은 가능합니다. 그러나 명확하게 결과 상태를 공유하는 것이 좋겠네요.
반응형
'c# 그리고 WPF' 카테고리의 다른 글
WPF(C#) 유저컨트롤의 입력컨트롤에 포커스 이동 (0) | 2023.03.06 |
---|