Возможно, вам вообще не следует возвращаться.
Если вы действительно не хотите использовать журнал, использование фрейма и страниц - плохая идея. Это редкое требование, чтобы вернуться к последнему представлению в настольных приложениях. Что с ними не веб браузер.
Возможно, у вас есть это требование.
Если у вас есть фрейм, у вас есть его журнал, и вы можете просто вызвать goback на навигационной службе фрейма.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.navigation.navigationservice.goback?view=netframework-4.8
Вы установили keepalive на страницах.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.page.keepalive?view=netframework-4.8
Вы написали этот код, и он, похоже, в значительной степени воспроизводит функциональность навигационного сервиса. Из того, что вы нам показали.
Как есть.
Используйте тип вместо магической строки в качестве ключа. Тип проверяется во время компиляции, магическая строка - нет, и вы можете делать ошибки.
Вы вообще исследовали эту проблему? Я думаю, может быть, это один из тех случаев, когда рассказывать кому-то о том, что он сделал неправильно, на самом деле не столько помогает, сколько рассказывать, как ему следует диагностировать.
Отладка является ключевым навыком для любого разработчика.
Перед вами работает код.
Поставьте точки останова, шагните и изучите, что происходит.
Когда вы переходите, что заканчивается _historic?
Когда вы возвращаетесь назад, что именно происходит?
Когда вы во второй раз щелкаете по возврату, по какому пути он идет, и в каком состоянии это происходит.