Всем доброго времени суток. У меня есть listbox который сделанный в виде меню. При выборе элемента у меня происходит навигация на другую страницу в Contetncontrol-е. Мне необходимо поменять выбранный элемент Listbox-а на то, что было выбрано на другой странице.
Listbox :
<ListBox Grid.Column="0"
ItemsSource="{Binding MenuItem}"
SelectedItem="{Binding SelectedMenuItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImagePath}"
Width="24"
Margin="15,5,15,5" />
<TextBlock Text="{Binding Name}"
Width="150"
TextWrapping="Wrap"
VerticalAlignment="Center"
Style="{StaticResource FontStyle}"
FontSize="16" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem"
BasedOn="{StaticResource MaterialDesignListBoxItem}">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="#166051" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
View Model:
/// <summary>
/// Список элементов меню
/// </summary>
public List<MenuModel> MenuItem { get; set; }
/// <summary>
/// Выбранный элемент из меню
/// </summary>
private MenuModel _selectedMenuItem;
public MenuModel SelectedMenuItem
{
get { return _selectedMenuItem; }
set
{
_selectedMenuItem = value;
OnPropertyChanged("SelectedModule");
GoNext();
}
}
Заполнение Listbox в конструкторе ViewModel:
MenuItem = new List<MenuModel>()
{
new MenuModel("ДОМОЙ", $"/Resources/Icons/HamburgerMenuIcons/Домой.ico"),
new MenuModel("ПОЛЕВОЙ ДНЕВНИК", $"/Resources/Icons/HamburgerMenuIcons/Полевой-дневник.ico"),
new MenuModel("КАТАЛОГ", $"/Resources/Icons/HamburgerMenuIcons/Каталог.ico"),
new MenuModel("ЛАБАРАТОРНЫЕ АНАЛИЗЫ", $"/Resources/Icons/HamburgerMenuIcons/Лабараторные-анализы.ico"),
new MenuModel("КАРТА", $"/Resources/Icons/HamburgerMenuIcons/Карта.ico"),
new MenuModel("ФОНДОВЫЕ", $"/Resources/Icons/HamburgerMenuIcons/Фондовые.ico"),
new MenuModel("АРХИВ", $"/Resources/Icons/HamburgerMenuIcons/Архив.ico"),
};
Функция GoNext для смены страницы:
public void GoNext()
{
switch (SelectedMenuItem.Name)
{
case "ДОМОЙ":
_navigationmaneger.Navigate("Menu")
break;
case "ПОЛЕВОЙ ДНЕВНИК":
_navigationmaneger.Navigate("ProjectPage");
break;
case "КАТАЛОГ":
MessageService.ShowMessage("Данный пункт в разработке");
break;
case "ЛАБАРАТОРНЫЕ АНАЛИЗЫ":
MessageService.ShowMessage("Данный пункт в разработке");
break;
case "КАРТА":
MessageService.ShowMessage("Данный пункт в разработке");
break;
case "ФОНДОВЫЕ":
MessageService.ShowMessage("Данный пункт в разработке");
break;
case "АРХИВ":
MessageService.ShowMessage("Данный пункт в разработке");
break;
}
}
На изображение Красный - Другая страница имеющая свою View и ViewModel
Желтый - Listbox. Как из страницы в которой красным квадратом выделено передать что была нажата к примеру "Полевой дневник" то и в listbox был соответствующий выбор?

.Navigate<T>()и вызывайте его откуда угодно. У вас же есть что-то подобное_navigationmaneger, вот его и сделайте синглтоном. А чтобы распределить зависимости по классам, можно использовать IoC. – aepot Sep 16 '22 at 06:00EventHandlerв c#, если прям вообще не охота разбираться - просто используйте делегатAction– Melkor V Sep 16 '22 at 10:10