I've been trying to implement WeakReferenceMessenger to send messages in my Xamarin app. I've successfully used it to send messages to an async callback using the following...
Message class:
public class MyMessage : CollectionRequestMessage<Task>
{
public MyMessage() { }
}
Register command:
WeakReferenceMessenger.Default.Register<MyMessage>(this, MyCallbackAsync);
Send command:
WeakReferenceMessenger.Default.Send(typeof(MyMessage));
And extending IMessengerExtensions:
public static partial class IMessengerExtensions
{
public static void Register<T>(this IMessenger messenger, object recipient, Func<Task> asyncAction) where T : CollectionRequestMessage<Task>
{
messenger.Register<T>(recipient, (r, m) =>
{
var task = asyncAction();
m.Reply(task);
});
}
}
I've also sent messages with values to non-async callbacks as follows...
Message class:
public class MyMessageWithString : ValueChangedMessage<string>
{
public MyMessageWithString(string value) : base(value) { }
}
Register command:
WeakReferenceMessenger.Default.Register<MyMessageWithString>(this, (r, m) => MyCallbackWithString(m.Value));
Send command:
var instance = Activator.CreateInstance(typeof(MyMessageWithString), new object[] { "Hello world" }) as MyMessageWithString;
WeakReferenceMessenger.Default.Send(instance);
Unfortunately, I also need to send a message with a value to an async callback but I can't see how to pass a value using CollectionRequestMessage (it doesn't seem to expose a Value property as ValueChangedMessage does). Can anyone suggest how this can be done?