wpf - 如果项目已分组,ItemContainerGenerator.ContainerFromItem 方法返回 null
问题描述
在 WPF ListBox 中,我可以使用ItemContainerGenerator.ContainerFromItem(selectedItem)方法获取所选项目容器,但在 ListBoxItem 分组时它不起作用。
主窗口.xaml
<ListBox x:Name="listBox" ItemsSource="{Binding Contacts}" Loaded="cardView1_Loaded" SelectedIndex="0" Width="250" Height="250"
HorizontalAlignment="Center" VerticalAlignment="Center">
<ListBox.GroupStyle>
<GroupStyle/>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
主窗口.xaml.cs
在加载的方法中,首先我调用了这个方法 ItemContainerGenerator.ContainerFromItem(selectedItem) 并且它返回所选项目的容器,因为 Listbox 项目没有分组。然后我为列表框项目添加了分组。现在,如果我调用此方法,它会返回 null。
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
private void cardView1_Loaded(object sender, RoutedEventArgs e)
{
withOutGroup.Text = withOutGroup.Text + listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem);
ICollectionView collectionView = CollectionViewSource.GetDefaultView(listBox.ItemsSource);
collectionView.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
withGroup.Text = withGroup.Text + listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem);
}
如果 Listbox 项已分组,如何获取选定项容器?
解决方案
您需要等待调用该ContainerFromItem
方法,直到实际创建容器。这有效:
private void cardView1_Loaded(object sender, RoutedEventArgs e)
{
ICollectionView collectionView = CollectionViewSource.GetDefaultView(listBox.ItemsSource);
collectionView.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Loaded,
new Action(() =>
{
var container = listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem);
//...
}));
}
推荐阅读
- javascript - 使用sails js的nodejs上的缓冲区不被识别为缓冲区
- javascript - 比特币交易中的 Webhook - 如何应用业务逻辑?
- python - Keras 如何在这个具有 CNN 和密集层的网络中设置维度?
- machine-learning - 决策树的深度取决于什么?
- python - Hangman 项目无法正确识别胜利。蟒蛇 2.7
- java - 在 Spring Cloud Config Server 客户端中实现属性源优先级
- r - 使用 rollmean 计算移动平均值,不包括 R 中的第一个观察值
- javascript - 谷歌地图没有加载变量值
- github - 如何从我的 github 存储库中完全删除 travis?
- c# - 检测到空变量后应用程序崩溃