我有两个需要管理项目列表的屏幕。用户可以从第一个屏幕导航到第二个屏幕。
当用户从第一个屏幕导航回来时,需要将项目列表保存到商店。
我正在考虑使用一种服务来保存集合,并将其注入到视图模型中。 但是,一旦用户从第一个屏幕导航回来,就必须释放服务实例:
docker build -t swift3-ssh .
docker run -p 2222:22 -i -t swift3-ssh
docker ps # find container id
docker exec -i -t <containerid> /bin/bash
但这看起来很尴尬,必须有更好的方法来做到这一点......
我看到有一个// somewhere, maybe in Application:
LifetimeManager = new ContainerControlledLifetimeManager();
Container.RegisterType<Service>(lifetimeManager);
class FirstPage()
{
ContainerControlledLifetimeManager _lifetimeManager;
public FirstPage()
{
InitializeComponent();
}
void OnDisappearing()
{
LifetimeManager.RemoveValue();
}
}
,这似乎是我需要的,但它仍然需要ExternallyControlledLifetimeManager
实例来获取经理的实例并调用FirstPage
。或者,我会在RemoveValue
上调用GC.Collect
以确保GC收集服务的实例,并且OnDisappearing
将在下次需要在{{1}中注入时重新创建它}。但是调用ExternallyControlledLifetimeManager
似乎也错了......
答案 0 :(得分:1)
根据您的评论,听起来您应该通过导航参数将数据传递给您的观点。然后每个页面可以不同地处理参数。保持简单。
var p = new NavigationParameters();
p.Add("items", MyListOfItems);
_regionManager.RequestNavigate("MyView", p);
答案 1 :(得分:0)
将您的Service
放入另一项服务中,该服务的职责是提供Service
的当前实例。
interface IServiceProvider
{
Service CurrentInstance { get; set; }
}
然后将此作为单身(ContainerControlledLifetimeManager
)注册,并在两个视图模型中使用它。第一个将实例设置为新实例,很可能由某些IServiceFactory
创建,第二个实例用实例填充实例。