通过ListBoxItem将ObservableCollection绑定到ListBox



我正试图将ObservableCollection与ListBox结合使用,这样当我向ObservableList添加元素时,ListBox就会自动更新,就像这样;

panels = new ObservableCollection<PanelCanvas>();
PanelList.DisplayMemberPath = "Name";
PanelList.ItemsSource = panels;

这运行得很好,但我有一个ListBoxItem.Selected事件,我真的需要它,但现在我不能使用,因为我的ListBox现在填充的是PanelCanvas对象,而不是ListBoxItem对象。

因此,我有两种方法-ObservableCollection附加到ListBox,当从面板中删除项目时,它会自动向ListBox添加/删除事件;以及通过创建新的ListBoxItem对象并将其放入ListBox来手动添加项目的方法。这个方法意味着我可以使用ListBoxItem.Selected事件!

我真正想要的是一种将两者结合起来的方法,这样ListBox就会由ObservableCollection自动填充,但ListBox不是用PanelCanvas对象填充,而是用ListBoxItem对象填充。这可能吗?

编辑:我做了一些挖掘,发现我可以使用ListBox的SelectionChanged事件和SelectedItem属性来获得令人满意的类似行为。我仍然非常感谢任何其他回复!

您可以通过编程为ListBoxItem.SelectedEvent事件添加一个事件处理程序,如下所示:

panels = new ObservableCollection<PanelCanvas>();
PanelList.DisplayMemberPath = "Name";
PanelList.ItemsSource = panels;
PanelList.AddHandler(ListBoxItem.SelectedEvent, new RoutedEventHandler(ListBox_Selected), true);

其中ListBox_Selected是您的事件处理程序:

private void ListBox_Selected(object sender, RoutedEventArgs e)
{
ListBoxItem item = e.OriginalSource as ListBoxItem;
PanelCanvas panelCanvas = item.DataContext as PanelCanvas;
//...
}

或者,您可以将ListBoxSelectedItem属性绑定到视图模型的PanelCanvas对象(如果有(。

或者处理SelectionChanged事件。

相关内容

  • 没有找到相关文章

最新更新