Как использовать SelectorBar, Frame и Dependency InjectionC#

Место общения программистов C#
Anonymous
Как использовать SelectorBar, Frame и Dependency Injection

Сообщение Anonymous »

Я использую WinUi 3, набор инструментов сообщества mvvm и Net 8.0 с языком C#.
У меня есть страница обзора, на которой должна отображаться коллекция элементов двумя возможными способами.
В App.xaml. cs я добавил следующие страницы для загрузки с помощью DI.

Код: Выделить всё

  services.AddTransient();
// Subpages of OverviewPage
services.AddTransient
();
services.AddTransient();
У вас должна быть возможность просматривать элементы в виде списка или DataGrid. Для этого я добавил элемент управления SelectorBar с событием SelectionChanged и фреймом.
OverviewPage.xaml OverviewPage.xaml.cs

Код: Выделить всё

    private void SelectorBar_OnSelectionChanged(...) {
var currentSelectedItem = sender.SelectedItem;
var currentSelectedIndex = sender.Items.IndexOf(currentSelectedItem);
var pageType = currentSelectedIndex switch {
0 => typeof(Page1),
1 => typeof(Page2),
_ => throw new("invalid page index")
};

var slideNavigationTransitionEffect = currentSelectedIndex - _previousHistorySelectorBarIndex > 0 ? SlideNavigationTransitionEffect.FromRight : SlideNavigationTransitionEffect.FromLeft;

HistoryContentFrame.Navigate(pageType, null, new SlideNavigationTransitionInfo() { Effect = slideNavigationTransitionEffect });

_previousHistorySelectorBarIndex = currentSelectedIndex;
}
Эти две страницы предназначены для запроса элементов через Messenger, когда они загружены, и это работает.
Моя проблема в том, что каждый раз вы меняете выбор, страницы Page1 и Page2 создаются снова и снова. Но я не хочу этого, я хочу, чтобы страницы Page1 и Page2 создавались один раз и удалялись при удалении страницы обзора.
Сначала я думал, что могу добавить подстраницы с помощью AddScoped, но не знаю, как это сделать. это. Есть ли у кого-нибудь идеи, как это сделать? Возможно ли это вообще?
С уважением

Подробнее здесь: https://stackoverflow.com/questions/783 ... -injection

Вернуться в «C#»