gpt4 book ai didi

wpf - listBox.ItemContainerGenerator.ContainerFromItem() 将 null 返回到添加到列表框中的 NEW 项

转载 作者:行者123 更新时间:2023-12-04 14:33:24 27 4
gpt4 key购买 nike

这是我在这里的第一篇文章,所以我希望你能帮助我解决关于 WPF 的问题。

我有一个与 ObservableCollection 绑定(bind)的列表框:

    public ObservableCollection<DeviceSetting> DeviceSettings
{
get { return _deviceSettings; }
set { _deviceSettings = value; }
}

<ListBox ItemTemplate="{StaticResource IPItemTemplate}" Name="listBoxAddresses" SelectionMode="Extended" ItemsSource="{Binding Path=TestSetting.DeviceSettings, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
ItemContainerStyle="{StaticResource ContainerStyle}" />

这里的情况是,我想知道是否已将新项目添加到列表中,所以我所做的是创建一个 CollectionChanged 事件:
TestSetting.DeviceSettings.CollectionChanged += mListBox_CollectionChanged;  

private void mListBox_CollectionChanged(object sender,NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
for (int i = 0; i < TestSetting.DeviceSettings.Count; i++){

ListBoxItem myListBoxItem = (ListBoxItem)(listBoxAddresses.ItemContainerGenerator.ContainerFromItem(listBoxAddresses.Items[i]));


if (!TestSetting.DeviceSettings[i].IsNetwork && DeviceDiscovery.IsSelected)
myListBoxItem.IsEnabled = false;

else if (TestSetting.DeviceSettings[i].IsNetwork && !DeviceDiscovery.IsSelected)
myListBoxItem.IsEnabled = false;
else
myListBoxItem.IsEnabled = true;

}
}

但是这个语句出现了一个问题:
ListBoxItem myListBoxItem = (ListBoxItem)(listBoxAddresses.ItemContainerGenerator.ContainerFromItem(listBoxAddresses.Items[i]));

每次我添加一个新项目时,上面的语句总是返回 null,因此不会检查添加的新项目是否启用。有没有办法让这个语句返回我需要的正确 ListBoxItem?

最佳答案

您正在处理基础集合 CollectionChanged事件。仅仅因为更改了集合并不意味着该项目已被渲染并且 UIElement准备好了。

注册 ItemsGenerator.StatusChanged应该保证 UIElement 的事件准备好了。

关于wpf - listBox.ItemContainerGenerator.ContainerFromItem() 将 null 返回到添加到列表框中的 NEW 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com