サーチ…


前書き

Xamarin.Formsには、分離されたコードを促進するメッセージングメカニズムが組み込まれています。このように、ビューモデルと他のコンポーネントはお互いを知る必要はありません。彼らは簡単なメッセージング契約で通信することができます。

MessagingCenterを使用するための基本的な要素は、基本的に2つありMessagingCenter

購読する ;特定の署名(契約)を持つメッセージをリッスンし、メッセージが受信されたときにコードを実行します。メッセージには複数のサブスクライバを含めることができます。

送信します。加入者が行動するためのメッセージを送信する。

簡単な例

ここでは、Xamarin.FormsでMessagingCenterを使用する簡単な例を見ていきます。

まず、メッセージを購読してみましょう。でFooMessagingモデル我々はから来たメッセージをサブスクライブMainPage 。メッセージは「Hi」でなければならず、受け取ったときにプロパティGreetingを設定するハンドラを登録します。最後に、現在のFooMessagingインスタンスがこのメッセージに登録してthisことを意味します。

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には、メッセージを送信するハンドラがあるボタンがあります。 thisMainPageインスタンスでなければなりません。

引数を渡す

また、メッセージを引数として渡すこともできます。

前の例のクラスを使って拡張します。受信側では、 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