0

我有一个 mvvmcross xamarin 项目,我试图找出在特定情况下跨屏幕发送数据的最佳方法。

我的第一个屏幕是一个搜索过滤器,它包含用户选择过滤结果的各种条件。第二个屏幕是结果列表屏幕。

我已经看到了许多解决这个问题的选择:

1) 使用 Init 方法 - 我在这里遇到的问题是,当我传递自定义对象时,值始终为空/默认值。如果我传递一个字符串,它工作正常。如果我可以传递自定义对象,我将传递 EntityFilter 或作为结果的实体列表。我确实必须在过滤器页面上查询实体,因为他们在一个过滤器上选择的内容会根据剩余的实体影响其他人。我已将以下内容添加到 AssemblyInfo.cs 中,但它仍然无法正常工作。

[assembly: InternalsVisibleTo("Cirrious.MvvmCross")]

2) 使用消息。这里的问题是当过滤器改变时没有创建结果页面,所以消息传递不起作用。

3)使用内存对象。我创建了一个结果服务,它只包含实体列表的公共属性。它在 IoC 中注册为惰性单例(所有服务也是如此)。这种方法有效,是我目前的解决方案。但它并不“感觉”正确。感觉就像我做错了什么或违反了最佳实践。这是应该做的吗?

4

1 回答 1

0

这是一个相当常见的问题。

最近有一个关于使用自定义类型进行导航的问题:v3 中导航参数中的自定义类型- 请注意,原始发帖人在他们的问题中提出了一种解决方案。

关于这个主题还有其他几个问题。所有这些的基本答案是在许多平台上导航使用序列化技术 - 例如 Xaml Urls 或 Android Intents。正因为如此,并且因为“墓碑”意味着您永远无法确定“新”页面与“旧”页面在相同的内存空间中,所以默认情况下 MvvmCross 坚持使用简单的可序列化类型进行所有ShowViewModel导航。

为什么导航只允许简单的可序列化类型的同样原因一直重复到 MvvmCross v1 - 例如,在 MVVMCross 中将对象传递给“导航到”视图模型的最佳方法是什么?

好消息是,这个主题在官方项目文档中也得到了一些喜爱——但这些文档仍在进行中——例如,请参阅https://github.com/MvvmCross/dev.mvvmcross.com/blob /master/_posts/1970-01-01-page-navigation.markdown

于 2013-06-28T16:29:55.380 回答