簡體   English   中英

如何更改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但是我需要它可以重復並且可以包含任意數量的項目。

是否可以創建項目數組,然后對其進行迭代?

MenuItems屬性返回一個IList<object>因此您可以在Page的構造函數中執行此操作:

public MainPage()
{
    this.InitializeComponent();

    foreach (var item in NPPngv.MenuItems.OfType<NavigationViewItem>())
    {
        item.IsEnabled = false;
    }
}

不要忘記using System.Linq;添加using System.Linq; 在您的源代碼文件的頂部。

如果要創建任意數量的項,則可以將MenuItemsSource與模型綁定。如果要啟用或禁用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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM