2

我有一个 WPF 组合框:

<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(索引 0)中的第一个元素,如何从索引为 0 的 _objectACollection 中获取(在 combobox_SelectionChanged 侦听器中)对象?

4

3 回答 3

3

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
        }
    }
于 2012-04-26T06:48:44.470 回答
2

您可以使用combobox.SelectedItem。

于 2012-04-26T06:42:18.373 回答
0

也许您可以尝试使用实现ICollectionView接口的集合,我相信其中有一些。它会为您跟踪集合中的选定项目,而无需SelectedObjectA在视图模型上使用单独的属性。所以你可以拥有:

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

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

于 2012-04-26T07:30:41.033 回答