You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码设置NavigationView的SelectedItem?赋值NavView.SelectedItem=1无效

解决NavigationView选中项无法通过NavView.SelectedItem = 1生效的问题

首先得明确:SelectedItem属性接收的是NavigationView的菜单项对象(比如NavigationViewItem),而不是整数索引。直接赋值1这种整数类型,系统无法匹配到对应的菜单项,所以自然不会生效。下面给你几种可行的解决方式:

方式1:直接赋值目标菜单项对象

如果你的菜单项是在XAML中静态定义的,并且给目标项设置了x:Name,可以直接引用这个对象赋值:

XAML示例:

<NavigationView x:Name="NavView">
    <NavigationView.MenuItems>
        <NavigationViewItem x:Name="HomeItem" Content="首页"/>
        <NavigationViewItem x:Name="SettingsItem" Content="设置"/>
    </NavigationView.MenuItems>
</NavigationView>

C#代码:

// 直接选中"设置"项
NavView.SelectedItem = SettingsItem;

方式2:通过索引设置(使用SelectedIndex属性)

如果你想通过索引来指定选中项,别用SelectedItem,改用SelectedIndex属性,它直接接收整数索引值:

// 选中索引为1的项(注意索引从0开始)
NavView.SelectedIndex = 1;

方式3:动态查找菜单项(适合动态绑定的场景)

如果你的菜单项是通过ItemsSource动态绑定的(比如绑定到ViewModel集合),可以通过菜单项的Tag、Content或者自定义属性来查找目标项,再赋值给SelectedItem:

示例代码(通过Tag查找):

// 假设每个NavigationViewItem的Tag设置了唯一标识
var targetItem = NavView.MenuItems
    .OfType<NavigationViewItem>()
    .FirstOrDefault(item => item.Tag != null && item.Tag.ToString() == "Settings");

if (targetItem != null)
{
    NavView.SelectedItem = targetItem;
}

注意事项

  • 确保在NavigationView加载完成后再执行设置操作,比如在Loaded事件中处理,避免因为菜单项还未初始化导致赋值无效:
private void NavView_Loaded(object sender, RoutedEventArgs e)
{
    // 在这里执行选中项设置
    NavView.SelectedIndex = 1;
}
  • 如果绑定的是自定义数据模型(而非直接绑定NavigationViewItem),SelectedItem需要赋值对应的模型对象,而非NavigationViewItem,这时候可以结合SelectedIndex或者通过模型的唯一标识查找对应的模型项。

内容的提问来源于stack exchange,提问作者Steve Fitzsimons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:29