2010-08-19 3 views
0

WPF 프로그램을 작성하고 있습니다. 이제 문제가 생깁니다. 내가 A 버튼의 이벤트를 할 수있는 방법 : 페이지가 창에서 함수를 호출하는 방법

문제가있는 버튼 C.가있는 페이지가 두 가지 버튼라는 이름으로, 프레임을 포함하는 창이며, 프레임 내에서 B.

핸들러는 페이지의 C 버튼을 클릭 할 때 실행됩니까?

프레임 XAML :

<Frame x:Name="Frame1" 
    NavigationUIVisibility="Hidden" 
    Margin="-50,0,-163,-11" 
    Grid.RowSpan="2"> 
</Frame> 

이벤트 핸들러 :

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    PageFind p = new PageFind(); 
    this.Frame1.Content = p; 
} 
private void button2_Click(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show("Succeed!!") 
} 

답변

1

이 일의 많은 방법이있다. 나는 (모델 - 뷰 - 뷰 모델 참조) 가장 좋은 방법이라고 생각하는 것에 빠지지 않고 질문에 대답하려고 노력할 것이다.

Window 및 Page 인스턴스는 서로를 "찾을"수 있어야하므로 C 버튼을 클릭 할 때 실행되는 메소드에 Window가 전달할 수 있거나 Window가 이벤트를 등록 할 수 있습니다. C 버튼을 클릭하면 해고 될 페이지.

질문은 Window가 페이지 인스턴스에 직접 액세스합니까, 아니면 프레임로드 프레임을 처리하기 위해 프레임의 탐색 프레임 워크를 사용하는 응용 프로그램입니까?

첫 번째 경우에는 Page 클래스의 공용 얼굴에 배치 할 수있는 이벤트로 Window를 등록하는 것이 간단합니다. 두 번째 경우 Page 인스턴스를 찾으려면 Frame의 탐색 서비스를 청취해야합니다.

또 다른 대안은 Window의 DataContext가 페이지로 이동한다는 것입니다. 창과 페이지가 바인딩 할 수있는 클래스를 만들면 페이지의 버튼을 클릭 할 때 해당 컨텍스트 클래스의 메서드를 호출 할 수 있습니다.이 컨텍스트 클래스는 버튼이 클릭되었다는 것을 Window에 알릴 수 있습니다.

+0

제안 해 주셔서 감사합니다. 그리고이 문제를 해결할 방법을 찾은 것 같습니다. 다음과 같이 시도했습니다. MainWindow mw; 공공 MainWindow를 MWindow { GET {MWindow를 반환;} 세트 {MWindow = 값;} 을} 죄송합니다 제 영어 실력이 좋지, 난 단지 내가 당신의 이메일이있을 수 않는 암호로 그것을 설명 할 수있는 내가 문제가있는 경우 도움을 청할 수 있니? – FallingRain

관련 문제