我有一个Xamarin.Android和Xamarin.iOS应用程序。该应用程序有一个名为PRODUCT的数据模型。在各种屏幕中,我们将根据查询或其他条件列出产品。假设用户通过选择特定产品从Activity-A(ios中的ViewController(导航到Activity-B,然后进一步导航到C、D等。基于Activity-D中的用户交互,我需要在从D导航回A的同时更新所有其他活动中的UI。如何将更改向下传播到后堆栈,或者如何在返回时相应地更新UI。某个活动可能直接在其中包含UI元素,而在其他地方它是列表的一部分。产品将具有唯一的id。
解决方案:
适用于Xamarin。iOS:
有几种方法可以在ViewControllers之间传递数据。在这里,我建议您在您的情况下使用NSNotificationCenter
。例如,如果您想在D
中执行某些指定操作时更改A,B,C's
UI,可以使用以下代码:
在控制器D
中:在您指定的操作中发布Notification
,您可以在字典(第三个参数(中添加您的个人需求(例如:产品ID、UI样式(:
NSNotificationCenter.DefaultCenter.PostNotificationName("changeUI",null, new NSDictionary("key1", 1, "key2", 2));
在控制器A,B,C
中,注册为命名为changeUI
的Notification
的观测器。
NSObject notificationToken;
void Setup()
{
notificationToken = NSNotificationCenter.DefaultCenter.AddObserver((NSString)"changeUI", doChangeUI);
}
void doChangeUI(NSNotification notification)
{
NSDictionary dict = notification.UserInfo;
Console.WriteLine("changeUI");
}
void Teardown()
{
NSNotificationCenter.DefaultCenter.RemoveObserver(notificationToken);
}
因此,一旦控制器D
发布名为changeUI
的Notification
,所有观察者将接收Notification
并执行预定义的功能(这里是doChangeUI
(。您可以在dict
(notification.UserInfo
(中获取您的个人需求,并更新控制器中的UI。
您可以参考:NSNotificationCenter
适用于Xamarin。安卓系统:
您可以在Xamarin.Android中使用Broadcast-Receivers
。它与Xamarin.iOS.中的NSNotificationCenter几乎相同
1.在活动A,B,C
中创建Broadcast Receiver
;
2.在活动D
中发布Broadcast
;
3.当你收到广播时,做你的事情
您可以参考文档了解更多详细信息:广播接收器