Хорошо, позвольте мне ответить на два ваших вопроса.
Во-первых, если вы хотите, чтобы регион отображал только одно представление (например, если у вас есть регион, определенный как ContentControl), это возможно. Вы можете добавить много видов в этот регион, и будет показан только один активный . Чтобы показать другой вид в этом регионе, который уже был добавлен, вы просто Activate
этот вид:
var region = regionManager.Regions["TabRegion"];
region.Add(view1);
region.Add(view2);
region.Activate(view2);
Таким образом, вы можете иметь много готовых экземпляров, но только один видимый.
Во-вторых, с истечением срока действия. Я бы сказал, что адаптер региона был бы самым чистым и правильным способом, но вы могли бы просто создать для них кэш с истекающим сроком действия, а когда он истек, вы можете удалить их из региона, если они не активны. :
var region = regionManager.Regions["TabRegion"];
region.Add(view1);
regionTracker.Add(view1, region, TimeSpan.FromMinutes(10));
region.Add(view2);
regionTracker.Add(view2, region, TimeSpan.FromMinutes(10));
region.Activate(view2);
И тогда реализация вашего срока действия для вашего regionTracker может просто:
if(!region.ActiveViews.Contains(ViewThatJustExpired))
{
region.Remove(ViewThatJustExpired);
}
Это немного недоделано, но, надеюсь, это даст вам представление о том, куда идти.