2011-05-03 6 views
0

저는 실버 라이트에 익숙하지 않아 사용자 컨트롤 간의 통신에 대해이 문제를 겪고 있습니다. 다른 사용자 컨트롤의 일부 속성을 설정해야하는 버튼이있는 사용자 컨트롤이 있습니다. 예를 들어, IsEnabled 속성을 true 또는 false 또는 가시성으로 설정하는 등의 작업을 수행 할 수 있습니다. 실제로 같은 될 것이라고 하나 개의 솔루션을 알고Silverlight의 사용자 컨트롤 간의 통신

클래스 UserControl1을 : UserControl을
{
공개 된 UserControl2 UC2;

개인 무효를 Button1_Click (개체 송신자 RoutedEventArgs E)
{
uc2.IsEnabled = 거짓; // 또는 uc2.SomeMethod();
}
} 유사

이 UserControl2를 클래스에 간다, 다음 메인 페이지에 난 단지 추가 :
UserControl1.uc2 = UserControl2를;

내 질문에, 어떻게 이벤트 처리기를 통해이 작업을 수행 할 수 있습니까? 아니면 더 나은 해결책이 있습니까? 간단한 예가 환영받을 것입니다. 감사.

+0

더 나은 시나리오를 설명해 주시겠습니까? – AbdouMoumen

+0

@AbduoMoumen 물론입니다. 다른 사용자 컨트롤과 상호 작용해야하는 여러 단추 (예 : new, edit, delete ...)가있는 사용자 정의 컨트롤이 있습니다 (예 : 새를 클릭하면 텍스트 상자가있는 사용자 정의 컨트롤이 표시되고 다른 사용자 검색 표시 줄을 나타내는 컨트롤이 비활성화 된 경우 등). 그래서 기본적으로 사용자 컨트롤 사이에 일종의 상호 작용이 필요합니다. 한 사용자 정의 컨트롤에서 단추를 클릭하면 하나의 사용자 정의 컨트롤을 표시하거나 다른 컨트롤을 제거하거나 다른 사용자 컨트롤의 속성을 변경하려고합니다. –

답변

0

또 다른 접근법은 이러한 통신을 위해 이벤트 수집기를 사용하는 것입니다. 우리 프로젝트에서 Prism의 이벤트 수집기를 사용하고 있습니다. 다음 thread을 확인하십시오. 이벤트 애그리 게이터 (aggregator)를 사용하는 동안주의해야 할
상황이

  • 최소한 자신의 사용을 유지합니다. 이벤트 수집기를 사용하는 이벤트 구독이 디버그하기 어려울 수 있기 때문입니다. 따라서 동일한 클래스 내에서 정상적인 이벤트를 사용하십시오.
  • 이벤트를 설명하는 방식으로 이벤트 수집기를 사용할 때 이벤트의 이름을 지정하십시오. 예를 들어 저장 버튼을 클릭하여 고객을 저장하는 경우 SaveButtonClicked 대신 BeforeCustomerSave \ CustomerSaved와 같은 이벤트 이름을 사용하십시오.