问题描述
我想使用数据模板实现带有动态标题和菜单项的 NavigationView。
<muxc:NavigationView
x:Name="SidebarNavigationView"
MenuItemsSource="{x:Bind viewmodel.SidebarItems,Mode=OneWay}"
MenuItemTemplateSelector="{StaticResource SidebarMenuItemTemplateSelector}"
SelectedItem="{x:Bind viewmodel.SelectedSidebarItem,Mode=TwoWay}"
ItemInvoked="SidebarNavigationView_ItemInvoked">
我有包含 3 个不同模板和 3 个数据类型的 MenuItemTemplateSelector
<local:SidebarMenuItemTemplateSelector
x:Key="SidebarMenuItemTemplateSelector"
NavItemTemplate="{StaticResource DataTemplateSidebarMenuItem}"
HeaderTemplate ="{StaticResource DataTemplateGroupSidebarMenuItem}"
NavSeparatorTemplate="{StaticResource DataTemplateSeparatorMenuItem}"/>
public class SidebarMenuItemTemplateSelector : DataTemplateSelector
{
public DataTemplate NavItemTemplate { get; set; }
public DataTemplate NavSeparatorTemplate { get; set; }
public DataTemplate HeaderTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
if (item is SeparatorSidebarItemviewmodel)
{
return NavSeparatorTemplate;
}
else if (item is GroupSidebarItemviewmodel)
{
return HeaderTemplate;
}
return NavItemTemplate;
}
}
每个数据模板看起来像
<DataTemplate x:Key="DataTemplateSidebarMenuItem" x:DataType="sidebar:FolderSidebarItemviewmodelBase">
<muxc:NavigationViewItem>
<Grid>
Some elements
</Grid>
</muxc:NavigationViewItem>
</DataTemplate>
<DataTemplate x:Key="DataTemplateGroupSidebarMenuItem" x:DataType="sidebar:GroupSidebarItemviewmodel">
<muxc:NavigationViewItem>
<Grid>
Some elements including toggle(collpse) button
</Grid>
</muxc:NavigationViewItem>
</DataTemplate>
<DataTemplate x:Key="DataTemplateSeparatorMenuItem" x:DataType="sidebar:SeparatorSidebarItemviewmodel">
<muxc:NavigationViewItemSeparator/>
</DataTemplate>
问题是:我在组内有文件夹,现在我将所有内容都实现为 NavigationMenuItem,因此当我选择其中包含一些文件夹的组项时,它崩溃了,因为它无法移动聚焦到一个文件夹。
注意:我的文件夹数据类型(基本上是 MenuItem)有一个属性“IsGroup”。
需要解决方案:我希望我的文件夹在未分组的情况下看起来像 NavigationMenuItem,如果 IsGroup 属性为 true,我希望我的文件夹在 NavigationMenuItemHeader(group) 内部查看。
如果您能提供帮助,那就太好了。提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)