GetItemAt返回null值而不是ComboBoxItem

时间:2015-07-20 14:29:41

标签: c# wpf

我有两个包含相同项目的ComboBox。 我试图通过索引获取ComboBox的ComboBoxItem但返回NULL值。 我的代码是:

var index = comboBox1.SelectedIndex;
ComboBoxItem item = comboBox2.Items.GetItemAt(index) as ComboBoxItem; // item is null here

//item = (ComboBoxItem)comboBox2.ItemContainerGenerator.ContainerFromItem(comboBox1.SelectedItem);
//also tried above line but same result(null)

和XAML:

<ComboBox Name="comboBox1" ItemsSource="{Binding ExistingModuleGroups}" SelectedItem="{Binding SelectedModuleGroup}" SelectionChanged="ComboBox1_SelectionChanged">
      <ComboBox.ItemTemplate>
            <DataTemplate>
                   <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
      </ComboBox.ItemTemplate>
</ComboBox>
<ComboBox Name="comboBox2" ItemsSource="{Binding ExistingModuleGroups}">
      <ComboBox.ItemTemplate>
            <DataTemplate>
                   <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
      </ComboBox.ItemTemplate>

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     if (e.AddedItems.Count > 0)
     {
          if (comboBox2.Items.Count > 0)
          {
                var index = comboBox1.SelectedIndex;
                ComboBoxItem item = comboBox2.Items.GetItemAt(index) as ComboBoxItem; // item is null here
                 //item.IsEnabled = false;
          }

     }
}

任何想法......

1 个答案:

答案 0 :(得分:2)

ItemsControl.Items属性存储实际数据,而不是生成的ComboBoxItems(除非您手动将ComboBoxItem类型的对象添加到Items集合中)。

你接近你所评论的第二段代码,但你正在寻找第二个组合中第一个组合的项目。由于您可能没有对两个组合使用相同的实例,因此无法工作。

正确的事情可能就是这个。与您已经尝试过的类似,但有一些关键的区别:

var index = comboBox1.SelectedIndex;  // Get the index from the first combo
var item = (ComboBoxItem)comboBox2.ItemContainerGenerator
               .ContainerFromIndex(index);  // And get the ComboBoxItem from that index
                                            // in the second combo