수색…


소개

Xamarin.Forms에는 분리 된 코드를 홍보하기위한 메시징 메커니즘이 내장되어 있습니다. 이렇게하면 뷰 모델과 다른 구성 요소가 서로를 알 필요가 없습니다. 단순한 메시징 계약을 통해 통신 할 수 있습니다.

기본적으로 MessagingCenter 를 사용하기위한 두 가지 주요 구성 요소가 있습니다.

구독하기 ; 특정 서명 (계약)이있는 메시지를 수신하고 메시지 수신시 코드를 실행합니다. 메시지에는 여러 명의 가입자가있을 수 있습니다.

보내기 ; 행동을 취할 가입자를위한 메시지 보내기

간단한 예

여기서는 Xamarin.Forms에서 MessagingCenter를 사용하는 간단한 예를 살펴 보겠습니다.

먼저 메시지를 구독 해 봅시다. FooMessaging 모델에서는 MainPage 에서 오는 메시지를 구독합니다. 메시지는 "안녕하세요"여야하며 우리가 메시지를 받으면 Greeting 속성을 설정하는 처리기를 등록합니다. 마지막으로 this 현재 FooMessaging 인스턴스가이 메시지를 등록하고 있음을 의미합니다.

public class FooMessaging
{
    public string Greeting { get; set; }

    public FooMessaging()
    {
        MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
            this.Greeting = "Hi there!";
        });
    }
}

이 기능을 트리거하는 메시지를 보내려면 MainPage 라는 페이지가 있어야하며 아래에 코드를 구현해야합니다.

public class MainPage : Page
{
    private void OnButtonClick(object sender, EventArgs args)
    {
        MessagingCenter.Send<MainPage> (this, "Hi");
    }
}

우리 MainPage 에는 메시지를 보내는 핸들러가있는 버튼이 있습니다. this MainPage 의 인스턴스 여야합니다.

인수 전달하기

함께 작업 할 메시지가있는 인수를 전달할 수도 있습니다.

이전 예에서 분류 한 것을 사용하고 확장합니다. 받는 부분에서 Subscribe 메서드 호출 바로 뒤에 예상되는 인수의 형식을 추가합니다. 또한 핸들러 시그니처에서 인수를 선언해야합니다.

public class FooMessaging
{
    public string Greeting { get; set; }

    public FooMessaging()
    {
        MessagingCenter.Subscribe<MainPage, string> (this, "Hi", (sender, arg) => {
            this.Greeting = arg;
        });
    }
}

메시지를 보낼 때 인수 값을 포함시켜야합니다. 또한 여기에서는 Send 메서드 바로 뒤에 형식을 추가하고 인수 값을 추가합니다.

public class MainPage : Page
{
    private void OnButtonClick(object sender, EventArgs args)
    {
        MessagingCenter.Send<MainPage, string> (this, "Hi", "Hi there!");
    }
}

이 예제에서는 간단한 문자열을 사용하지만 다른 유형의 (복잡한) 객체를 사용할 수도 있습니다.

구독 취소

메시지를 더 이상 수신 할 필요가 없으면 간단히 수신 거부 할 수 있습니다. 다음과 같이 할 수 있습니다.

MessagingCenter.Unsubscribe<MainPage> (this, "Hi");

인수를 제공 할 때 다음과 같이 전체 서명을 구독 취소해야합니다.

MessagingCenter.Unsubscribe<MainPage, string> (this, "Hi");



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow