C# ObservableCollection在选择时获取项目已更改

C# ObservableCollection在选择时获取项目已更改,c#,.net,wpf,combobox,observablecollection,C#,.net,Wpf,Combobox,Observablecollection,我有一个WPF组合框: <ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox" SelectionChanged="combobox_SelectionChanged"> ... </ComboBox> 此时将显示组合框,当我选择某个对象时,将获得集合对象的索引。 但是有没有办法把物

我有一个WPF组合框:

<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox" SelectionChanged="combobox_SelectionChanged">
    ...
</ComboBox>
此时将显示组合框,当我选择某个对象时,将获得集合对象的索引。 但是有没有办法把物品还给我?例如: 我选择组合框中的第一个元素(索引0),
如何(在combobox\u SelectionChanged listener中)从索引为0的\u objectACollection获取对象?

您可以使用combobox.SelectedItem。

combobox有SelectedItem属性。我认为您可以将SelectedItem与TwoWay绑定到VM。下面是exmaple。我希望这能有所帮助

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

也许您可以尝试使用一个实现
ICollectionView
接口的集合,我相信其中有一些是现成的。它可以为您跟踪收藏中的选定项目,而无需在viewmodel上使用单独的
SelectedObjectA
属性。因此,您可以:

> <ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel},
> Path=**SomeICollectionView**, Mode=OneTime}" x:Name="combobox"> ...
> </ComboBox>
>。。。
> 

要从viewmodel类中获取所选项目,您所要做的就是
SomeICollectionView.CurrentItem

好的,谢谢,我忘了在测试中强制转换
((ObjectA)combobox.SelectedItem).Name
@David在强制执行之前检查值是否为null,因为我不知道代码的其余部分,但可能在某些情况下未选择任何项,这将引发异常。最好将
getItems
重命名为
Items
Collection
。前缀为“get”表示一种方法
<ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel}, Path=getItems, Mode=OneTime}" x:Name="combobox"  SelectedItem="{Binding SelectedObjectA, Mode=TwoWay}">
...
</ComboBox>
    private ObjectA _SelectedObjectA;
    public ObjectA SelectedObjectA
    {
        get
        {
            return _SelectedObjectA;
        }
        set
        {
            if (_SelectedObjectA == value)
                return;

            _SelectedObjectA = value;

            // Notifu changed here
        }
    }
> <ComboBox ... ItemsSource="{Binding Source={StaticResource viewModel},
> Path=**SomeICollectionView**, Mode=OneTime}" x:Name="combobox"> ...
> </ComboBox>