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