WinUI 3中无法动态绑定NavigationViewItem的x:Uid属性问题
我用Template Studio for WinUI创建了Windows App应用,基于WinUI 3 NavigationView开发,打算通过SQL Server中的用户权限数据动态生成NavigationViewItem。作为XAML和MVVM新手,我已经实现了菜单名称、子菜单及图标的数据绑定,但始终无法绑定x:Uid属性,查了资料也没找到x开头属性的动态绑定方法。
XAML代码
<NavigationViewItem Content="{x:Bind Name}" MenuItemsSource="{x:Bind Children}" x:Uid="{Bind Id}" > <NavigationViewItem.Icon> <SymbolIcon Symbol="{x:Bind CategoryIcon}" /> </NavigationViewItem.Icon> </NavigationViewItem>
C#数据模型示例
new Category(){ Id = "21", Name = "Menu item 7", CategoryIcon = "Home", Children = new ObservableCollection<Category>() { new Category() { Id = "211", Name = "Menu item 8", CategoryIcon = "Home" }, new Category() { Id = "212", Name = "Menu item 9", CategoryIcon = "Home" } } }
报错信息

解决方法
直接把XAML中的x:Uid="{Bind Id}"替换为Uid="{x:Bind Id}",修改后的代码如下:
<NavigationViewItem Content="{x:Bind Name}" MenuItemsSource="{x:Bind Children}" Uid="{x:Bind Id}" > <NavigationViewItem.Icon> <SymbolIcon Symbol="{x:Bind CategoryIcon}" /> </NavigationViewItem.Icon> </NavigationViewItem>
原因说明
x:Uid是XAML编译阶段处理的标记指令,不支持数据绑定。而FrameworkElement类提供了对应的Uid CLR属性,这个属性可以通过{x:Bind}或{Binding}动态绑定,两者作用完全一致,都是为元素设置本地化标识键。后续如果需要做本地化,确保资源文件中存在对应Id值的键即可。
内容的提问来源于stack exchange,提问作者Cenk Yenikoylu
相关产品推荐
相关产品推荐

