【发布时间】:2018-08-21 15:50:06
【问题描述】:
我尝试使用NavigationView,因为它看起来非常有用,但我正在努力使其与 MVVM 模式一起使用。
我在这个 sn-p 中附加了 MenuItemsSource 属性:
<Page x:Class="App5.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App5"
...>
<Page.DataContext>
<local:MainViewModel></local:MainViewModel>
</Page.DataContext>
<NavigationView MenuItemsSource="{Binding Items}">
<NavigationView.MenuItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</NavigationView.MenuItemTemplate>
</NavigationView>
</Page>
我得到的只有这个:
这很酷,但是NavigationViewItem 有一个Icon 属性来装饰文本。
如何根据每个NavigationViewItem绑定的项目设置图标?
注意:我真的不想手动将图标添加为MenuItemTemplate 的一部分,因为这不是应有的方式。我需要的是绑定隐式生成的NavigationViewItems 的 Icon 属性。
问题是怎么做的?
我已经尝试过(使用MenuItemContainerStyle),但它不起作用:
<NavigationView MenuItemsSource="{Binding Items}">
<NavigationView.MenuItemContainerStyle>
<Style TargetType="NavigationViewItem">
<Setter Property="Icon" Value="{Binding Converter={StaticResource ItemToIconConverter}}" />
</Style>
</NavigationView.MenuItemContainerStyle>
<NavigationView.MenuItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</NavigationView.MenuItemTemplate>
</NavigationView>
注意:使用以下答案中建议的 XAML(在 DataTemplate 中放置 NavigationViewItem),NavigationViewItem 在可视树中重复(一个嵌套到另一个):
这不是一个解决方案。此外,它的外观和行为都很糟糕。查看建议解决方案的快照:
【问题讨论】:
标签: .net mvvm uwp windows-10-universal