Запросить обновление NavigationView из другой части формы - PullRequest
0 голосов
/ 28 октября 2019

Я новичок в кодировании UWP. У меня есть простое приложение UWP, использующее VB.NET. Код в ContentGrid в другом месте той же «формы» обновляет некоторые параметры, влияющие на NavigationView. Как я могу получить NavigationView для обновления?

Я не могу ссылаться на него из одного представления в другое

XAML фрагмент представления навигации:

<winui:NavigationView.MenuItems>
    <winui:NavigationViewItem x:Uid="Shell_Main" Name="MainMenu" Tag="" Icon="Home" helpers:NavHelper.NavigateTo="views:MainPage" />
    <winui:NavigationViewItem x:Uid="Shell_ContentGrid" Name="Video1" Tag="" Icon="GotoStart" helpers:NavHelper.NavigateTo="views:ContentGridPage" />
    <winui:NavigationViewItem x:Uid="Shell_ContentGrid2" Name="Video2" Tag="\KES\" Icon="Slideshow" helpers:NavHelper.NavigateTo="views:ContentGridPage2" />
</winui:NavigationView.MenuItems>
<winui:NavigationView.PaneFooter>
    <NavigationViewItem Icon="Help" Content="Help" Tag="User"/>
</winui:NavigationView.PaneFooter>

VB-код позади формы / представления для отключения менюэлементы в событии OnLoaded работают нормально

For Each topic In navigationView.MenuItems
    strDepends = topic.tag
    bAllowed = Helpers.ContentAllowed(strDepends)
    If Not bAllowed Then topic.IsEnabled = False
Next

Код в другом представлении изменяет настройки, активируя настройку меню, но я не могу сказать, что меню обновляется.

I 'Мне бы хотелось, чтобы NavigationView обновлял / перекрашивал / что угодно

1 Ответ

0 голосов
/ 29 октября 2019

Код в другом представлении изменяет настройки, включая настройки меню, но я не могу сказать, чтобы меню обновлялось.

Если мы хотим, чтобы NavigationView мог обновитьв другом представлении мы передаем экземпляр NavigationView другому представлению при вызове метода Navigate. Я обнаружил, что вы использовали шаблонную студию VB UWP, см. Следующий код.

Private Sub OnItemInvoked(ByVal sender As WinUI.NavigationView, ByVal args As WinUI.NavigationViewItemInvokedEventArgs)
    Dim item = navigationView.MenuItems.OfType(Of WinUI.NavigationViewItem).First(Function(menuItem) CStr(menuItem.Content) Is CStr(args.InvokedItem))
    Dim pageType = TryCast(item.GetValue(NavHelper.NavigateToProperty), Type)
    NavigationService.Navigate(pageType, navigationView)
End Sub

Другая страница

Protected Overrides Sub OnNavigatedTo(ByVal e As NavigationEventArgs)
    MyBase.OnNavigatedTo(e)
    Dim nav = TryCast(e.Parameter, Microsoft.UI.Xaml.Controls.NavigationView)

    If nav IsNot Nothing Then

        For Each item As Microsoft.UI.Xaml.Controls.NavigationViewItem In nav.MenuItems
            // update navigateview's status 
        Next
    End If
End Sub
...