ObservableCollection在SelectionChanged上获取项目

时间:2012-04-26 06:37:23

标签: c# .net wpf combobox observablecollection

我有一个WPF ComboBox:

<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox" SelectionChanged="combobox_SelectionChanged">
    ...
</ComboBox>

有很多项目。

我的ViewModel类:

public class ViewModel
{
    private readonly ObservableCollection<ObjectA> _objectACollection= new ObservableCollection<ObjectA>(); 

    public ViewModel()
    { 
        _objectACollection.Add(new ObjectA("Text 1", "Text", "Text"));
        _objectACollection.Add(new ObjectA("Text 2", "Text", "Text"));
        _objectACollection.Add(new ObjectA("Text 3", "Text", "Text"));
    }

    public void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Trace.WriteLine(combobox.SelectedIndex);
    }

    public ObservableCollection<ObjectA> getItems
    {
        get { return _objectACollection; }
    }
}

和selectionChanged监听器:

private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Trace.WriteLine(combobox.SelectedIndex);
}

显示ComboBox,当我选择某些内容时,我会获得集合对象的索引。 但有没有办法让我回到这个对象?例如: 我选择ComboBox中的第一个元素(索引0), 如何从_objectACollection中获取(在combobox_SelectionChanged侦听器中)具有索引0的对象?

3 个答案:

答案 0 :(得分:2)

您可以使用combobox.SelectedItem。

答案 1 :(得分:2)

ComboBox有SelectedItem属性。我认为您可以将SelectedItem与TwoWay绑定到您的VM。以下是例外。我希望这有帮助。

<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox"  SelectedItem="{Binding SelectedObjectA, Mode=TwoWay}">
...
</ComboBox>

您应该在VM中添加SelectedObjectA属性。您可以从VM.SelectedObjectA属性中获取所选项目。

    private ObjectA _SelectedObjectA;
    public ObjectA SelectedObjectA
    {
        get
        {
            return _SelectedObjectA;
        }
        set
        {
            if (_SelectedObjectA == value)
                return;

            _SelectedObjectA = value;

            // Notifu changed here
        }
    }

答案 2 :(得分:0)

也许您可以尝试使用实现ICollectionView界面的集合,我确信有一些已经完成。它会为您跟踪集合中的所选项目,而无需单独的{{1您的viewmodel上的属性。所以你可以:

SelectedObjectA

要从viewmodel类中获取所选项,您只需要> <ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, > Path=**SomeICollectionView**, Mode=OneTime}" x:Name="combobox"> ... > </ComboBox>