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

如何在WPF的HandyControl hc:SideMenu中获取选中项的Header

解决HandyControl SideMenu获取选中项Header的问题

你的代码无法正确获取选中项Header的原因是错误访问了MySideMenu.Header——这个属性是SideMenu的头部内容,并非当前选中的SideMenuItem。以下是两种正确的实现方式:

一、后台事件处理(SelectionChanged事件)

修改你的MySideMenu_SelectionChanged方法,通过事件参数或SideMenu的SelectedItem属性获取选中项:

private void MySideMenu_SelectionChanged(object sender, HandyControl.Data.FunctionEventArgs<object> e)
{
    // 方式1:从事件参数提取选中项
    if (e.Data is SideMenuItem selectedItem)
    {
        textBox.Text = selectedItem.Header?.ToString();
    }

    // 方式2:直接访问SideMenu的SelectedItem属性
    // if (MySideMenu.SelectedItem is SideMenuItem selectedItem)
    // {
    //     textBox.Text = selectedItem.Header?.ToString();
    // }
}

注意:事件参数类型需指定为FunctionEventArgs<object>(HandyControl的SelectionChanged事件携带泛型参数),否则无法正确获取选中项数据。

二、MVVM命令方式(SwitchItemCmd)

如果你更倾向于MVVM模式,可在ViewModel中处理SwitchItemCmd命令,直接从事件参数解析选中项:

ViewModel代码

// 定义命令和绑定属性
public ICommand SwitchItemCmd { get; }
public string SelectedHeader { get; set; }

// 构造函数初始化命令
public YourViewModel()
{
    SwitchItemCmd = new RelayCommand<FunctionEventArgs<object>>(HandleSideMenuSelection);
}

private void HandleSideMenuSelection(FunctionEventArgs<object> args)
{
    if (args.Data is SideMenuItem selectedItem)
    {
        SelectedHeader = selectedItem.Header?.ToString();
        // 触发属性通知(需实现INotifyPropertyChanged接口)
        OnPropertyChanged(nameof(SelectedHeader));
    }
}

修改XAML文本框绑定

将文本框的Text属性绑定到ViewModel的SelectedHeader:

<TextBox Text="{Binding SelectedHeader}" />

内容的提问来源于stack exchange,提问作者Eng.Mohamed Bassuny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:05:19