1

mvvmlight v4 のメッセンジャーの使用について質問があります: メッセンジャーのレジスターはどこに置くべきですか? 私はいくつかの例を探しました。彼らはそれらをコンストラクターのビューに入れました。しかし、ビューのインスタンスを作成するたびに、このメッセージが再度登録されるという問題がありました->メッセージハンドラーは、登録されたメッセージと同じ数として呼び出されます。

など: 次のようなメッセージを登録します。

Messenger.Default.Register<NotificationMessage>(this, (nm) =>
    {
        if (nm.Sender == this.DataContext)
        {
           if (nm.Notification == "OnNext")
           {
               this.Hide();
               Form2 f2= new Form2();
               f2.Show();
           }
        }
    }

--> 毎回、1 回目のユーザーが [次へ] をクリックすると、1 つのフォームが表示されますが、ユーザーが再度 [次へ] をクリックすると、今度は 2 つのメッセージが登録され、2 つのフォームが表示されます。この場合、どうすればよいですか?

ご協力いただきありがとうございます。

4

1 に答える 1

2

ビューのコンストラクターは、Messenger のレジスターを配置するのに適しているようです。関数に登録解除を入れることができCleanup()ます(インターフェースを実装する必要がありICleanupます)

public class MainWindow : ICleanup
{
    public MainWindow()
    {
        InitializeComponent();

        Messenger.Default.Register(recipient, action);
    }

    public void Cleanup()
    {
        Messenger.Default.Unregister(recipient, action);
    }
}
于 2012-12-17T13:34:17.033 に答える