我有一个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的对象?
答案 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>