【发布时间】:2015-04-03 13:33:47
【问题描述】:
这是我在这里的第一篇文章,所以我希望你能帮助我解决关于 WPF 的问题。
我有一个与 ObservableCollection 绑定的列表框:
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?
【问题讨论】:
-
为什么不在 ItemTemplate 中使用绑定(借助一些转换器)?无论如何,您正在检查属性,您现在只能手动执行此操作。
标签: wpf