我一直在尝试实现WeakReferenceMessenger来在我的Xamarin应用程序中发送消息。我已经成功地使用它发送消息到一个异步回调使用以下.
消息类:
public class MyMessage : CollectionRequestMessage<Task>
{
public MyMessage() { }
}
注册命令:
WeakReferenceMessenger.Default.Register<MyMessage>(this, MyCallbackAsync);
发送命令:
WeakReferenceMessenger.Default.Send(typeof(MyMessage));
扩展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);
});
}
}
我还向非异步回调发送了带有值的消息,如下所示...
消息类:
public class MyMessageWithString : ValueChangedMessage<string>
{
public MyMessageWithString(string value) : base(value) { }
}
注册命令:
WeakReferenceMessenger.Default.Register<MyMessageWithString>(this, (r, m) => MyCallbackWithString(m.Value));
发送命令:
var instance = Activator.CreateInstance(typeof(MyMessageWithString), new object[] { "Hello world" }) as MyMessageWithString;
WeakReferenceMessenger.Default.Send(instance);
不幸的是,我还需要向异步回调发送一个带有值的消息,但我不知道如何使用CollectionRequestMessage传递值(它似乎没有像ValueChangedMessage那样公开Value属性)。有人能建议如何做到这一点吗?
1条答案
按热度按时间djp7away1#
不幸的是,我还需要向异步回调发送一个带有值的消息,但我不知道如何使用CollectionRequestMessage传递值(它似乎没有像ValueChangedMessage那样公开Value属性)。有人能建议如何做到这一点吗?
关于异步回调,你可以使用Moq框架的Callback方法,参考这个案例:Moq callback for ReturnsAsync。