我正试图将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;
//...
}
或者,您可以将ListBox
的SelectedItem
属性绑定到视图模型的PanelCanvas
对象(如果有(。
或者处理SelectionChanged
事件。