如何更改 NavigaitonViewItems 的属性
How to change the properties of NavigaitonViewItems
MainPage.xaml
<NavigationView x:Name="NPPngv" x:FieldModifier="public">
<NavigationView.MenuItems>
<NavigationViewItem Content="Customer"/>
<NavigationViewItem Content="Deliverer"/>
<NavigationViewItem Content="Admin"/>
</NavigationView.MenuItems>
<Frame x:Name="contentFrame"/>
</NavigationView>
有没有办法为每个 NavigationViewItems
更改 属性
例如,我想将所有项目设置为 IsEnabled=false
,但我需要它是可重复的并且具有任意数量的项目。
是否可以创建项目数组然后遍历它?
如果你想创建任意数量的项目,你可以绑定 MenuItemsSource 和 model.And 如果你想启用或禁用 NavigationViewItem,你可以 IsEnabled 属性 在模型中然后绑定它。
.xaml
<Page.Resources>
<local:NavigationItemTemplateSelector x:Key="NavigationItemTemplateSelector">
<local:NavigationItemTemplateSelector.ItemTemplate>
<DataTemplate x:DataType="local:ViewModel" >
<NavigationViewItem Content="{x:Bind Name,Mode=OneWay}"
IsEnabled="{x:Bind IsEnabled,Mode=OneWay}" >
</NavigationViewItem>
</DataTemplate>
</local:NavigationItemTemplateSelector.ItemTemplate >
</local:NavigationItemTemplateSelector>
</Page.Resources>
<NavigationView x:Name="NPPngv" MenuItemsSource="{x:Bind NavigationList,Mode=OneWay}"
MenuItemTemplateSelector="{StaticResource NavigationItemTemplateSelector}">
<Frame x:Name="ContentFrame"/>
</NavigationView>
.cs:
[ContentProperty(Name = "ItemTemplate")]
public class NavigationItemTemplateSelector : DataTemplateSelector
{
public DataTemplate ItemTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
return ItemTemplate;
}
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
NavigationList = new ObservableCollection<ViewModel>();
NavigationList.Add(new ViewModel { Name = "item1", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item2", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item3", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item4", IsEnabled = false });
}
private ObservableCollection<ViewModel> NavigationList { get; set; }
}
MenuItems
属性 returns 和 IList<object>
所以你可以在 Page
:
的构造函数中执行此操作
public MainPage()
{
this.InitializeComponent();
foreach (var item in NPPngv.MenuItems.OfType<NavigationViewItem>())
{
item.IsEnabled = false;
}
}
不要忘记在源代码文件的顶部添加 using System.Linq;
。
MainPage.xaml
<NavigationView x:Name="NPPngv" x:FieldModifier="public">
<NavigationView.MenuItems>
<NavigationViewItem Content="Customer"/>
<NavigationViewItem Content="Deliverer"/>
<NavigationViewItem Content="Admin"/>
</NavigationView.MenuItems>
<Frame x:Name="contentFrame"/>
</NavigationView>
有没有办法为每个 NavigationViewItems
更改 属性
例如,我想将所有项目设置为 IsEnabled=false
,但我需要它是可重复的并且具有任意数量的项目。
是否可以创建项目数组然后遍历它?
如果你想创建任意数量的项目,你可以绑定 MenuItemsSource 和 model.And 如果你想启用或禁用 NavigationViewItem,你可以 IsEnabled 属性 在模型中然后绑定它。
.xaml
<Page.Resources>
<local:NavigationItemTemplateSelector x:Key="NavigationItemTemplateSelector">
<local:NavigationItemTemplateSelector.ItemTemplate>
<DataTemplate x:DataType="local:ViewModel" >
<NavigationViewItem Content="{x:Bind Name,Mode=OneWay}"
IsEnabled="{x:Bind IsEnabled,Mode=OneWay}" >
</NavigationViewItem>
</DataTemplate>
</local:NavigationItemTemplateSelector.ItemTemplate >
</local:NavigationItemTemplateSelector>
</Page.Resources>
<NavigationView x:Name="NPPngv" MenuItemsSource="{x:Bind NavigationList,Mode=OneWay}"
MenuItemTemplateSelector="{StaticResource NavigationItemTemplateSelector}">
<Frame x:Name="ContentFrame"/>
</NavigationView>
.cs:
[ContentProperty(Name = "ItemTemplate")]
public class NavigationItemTemplateSelector : DataTemplateSelector
{
public DataTemplate ItemTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
return ItemTemplate;
}
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
NavigationList = new ObservableCollection<ViewModel>();
NavigationList.Add(new ViewModel { Name = "item1", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item2", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item3", IsEnabled = false });
NavigationList.Add(new ViewModel { Name = "item4", IsEnabled = false });
}
private ObservableCollection<ViewModel> NavigationList { get; set; }
}
MenuItems
属性 returns 和 IList<object>
所以你可以在 Page
:
public MainPage()
{
this.InitializeComponent();
foreach (var item in NPPngv.MenuItems.OfType<NavigationViewItem>())
{
item.IsEnabled = false;
}
}
不要忘记在源代码文件的顶部添加 using System.Linq;
。