【问题标题】:How to change the properties of NavigaitonViewItems如何更改 NavigationViewItem 的属性
【发布时间】:2019-08-25 13:15:59
【问题描述】:

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,但我需要它是可重复的并且可以使用任意数量的项目。

是否可以创建一个项目数组,然后对其进行迭代?

【问题讨论】:

    标签: c# xaml uwp navigationview


    【解决方案1】:

    MenuItems 属性返回 IList&lt;object&gt;,因此您可以在 Page 的构造函数中执行此操作:

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

    不要忘记在源代码文件的顶部添加using System.Linq;

    【讨论】:

      【解决方案2】:

      如果要创建任意数量的项目,可以将 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; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-10
        相关资源
        最近更新 更多