如何在WPF的HandyControl hc: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
相关产品推荐
相关产品推荐

