我在 MainPage.xaml 中创建了一个带有NavigationView
(winui 2.4)的新 UWP 项目。
我通过绑定层次结构ObservableCollection
来填充NavigationView
菜单项(1 个父项,4 个子项)
启动应用程序,分层结构按预期呈现,并且似乎工作正常。
我的下一个目标是点击按钮折叠每个展开的菜单项。为此,文档建议使用NavigationView.Collapse(NavigationViewItem)
: 我的意图是遍历NavigationView.MenuItems
并折叠它们。
问题是它似乎NavigationView.MenuItems
返回空,我不知道为什么。我包含了一个打印的 Button NavigationView.MenuItems.Count()
,它返回 0。
另一方面,对分层菜单项进行硬编码并重复上述过程似乎可以正常工作。
主页.xaml
<Grid>
<muxc:NavigationView x:Name="MainNavigation" MenuItemsSource="{x:Bind categories, Mode=OneWay}">
<muxc:NavigationView.MenuItemTemplate>
<DataTemplate x:DataType="data:Category" >
<muxc:NavigationViewItem Content="{x:Bind Name}" MenuItemsSource="{x:Bind Children}" />
</DataTemplate>
</muxc:NavigationView.MenuItemTemplate>
<Button Content="Do Something" Click="Button_Click" />
</muxc:NavigationView>
</Grid>
MainPage.xaml.cs
public sealed partial class MainPage : Page
{
ObservableCollection<Category> categories = new ObservableCollection<Category>();
public MainPage()
{
this.InitializeComponent();
categories = PopulateHierarchy();
}
private ObservableCollection<Category> PopulateHierarchy()
{
ObservableCollection<Category> list = new ObservableCollection<Category>();
ObservableCollection<Category> children = new ObservableCollection<Category>();
children.Add(new Category { Name = "Child 1" });
children.Add(new Category { Name = "Child 2" });
children.Add(new Category { Name = "Child 3" });
children.Add(new Category { Name = "Child 4" });
list.Add(new Category { Name = "Test1", Children=children });
return list;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
int itemsCount = MainNavigation.MenuItems.Count();
Debug.WriteLine(itemsCount);
}
}
类别.cs
public class Category
{
public string Name { get; set; }
public ObservableCollection<Category> Children { get; set; }
}
编辑:这似乎是一个已知的错误,我在GitHub 上发现了一个已关闭的问题,但问题仍然存在。