如何获取 ComboBox 的值?

Posted

技术标签:

【中文标题】如何获取 ComboBox 的值?【英文标题】:How to get the value of a ComboBox? 【发布时间】:2021-10-24 12:39:54 【问题描述】:

我有一个想要从中获取值的 WPF ComboBox。

<ComboBox Name="ChoicesList" Grid.Column="2" Grid.Row="2" Margin="0,0,10,10">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ComboBoxItem Content="Binding ChoiceName" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我试过这个(如 here 所示)来得到它:

Bets.Add(new Bet()  Name = nameInput.Text, Amount = amount, Choice = (ChoicesList.SelectedValue as ComboBoxItem).Content.ToString() );

但每次我尝试都会收到System.NullReferenceException: 'Object reference not set to an instance of an object.' 错误。该列表显然不是空的。

所以我尝试another way 得到它。

Bets.Add(new Bet()  Name = nameInput.Text, Amount = amount, Choice = ChoicesList.SelectedValue.ToString() );

我没有得到异常,但我也没有得到我想要的数据。我得到了PoolBet.MainWindow+Choice

列表初始化:

public ObservableCollection<Choice> Choices  get; set;  = new ObservableCollection<Choice>();

public class Choice

    public string ChoiceName  get; set; 

我在这里做错了什么?

【问题讨论】:

在您的第一次尝试中,您尝试将 ChoicesList.SelectedValue 转换为 ComboBoxItem,但如果您将其绑定到 ObservableCollection Choices,则 SelectedValue 的类型是 Choice 而不是 @987654335 @,导致 NullReferenceException。对于第二次尝试,尽管您没有覆盖该方法,但您直接在对象上使用 ToString(),您有两个选择:1. Choice = (ChoicesList.SelectedValue as Choice).ChoiceName 和 2. 在您的类中添加 ToString() 方法 Choice 非常感谢!它现在可以完美运行。如果不是评论,将设置为答案。 不是直接关于您的问题,而是当模板是默认模板时,数据模板化项目的意义何在..?我想你可以设置 DisplayMemberPath="ChoiceName" @SpaceNerden 实际上 Ivan 的回答值得您在 MVVM 中查看,因为您的 SelectedValue 可以始终位于 ViewModel 的属性中 【参考方案1】:

查看:

<ComboBox ItemsSource="Binding Choices" SelectedItem="Binding SelectedChoice"/>

查看模型:

public ObservableCollection<Choice> Choices  get; 

private Choice _selectedChoice;
public Choice SelectedChoice 

 get
 
    return _selectedChoice;
  
 set
 
    _selectedChoise = value;
    OnPropertyChanged();
  

不要忘记为您的视图模型实现INotifyPropertyChanged 接口,并将视图模型设置为DataContext 用于视图。

【讨论】:

以上是关于如何获取 ComboBox 的值?的主要内容,如果未能解决你的问题,请参考以下文章

c#如何获取comboBox当前选中的值

如何获取 ComboBox 的值?

如何在 ExtJS Combobox 中获取所选 displayField 的值

如何在 JavaFx 的可编辑 ComboBox 中获取输入值?

求教,如何获得comboBox中当前选择的值

如何获取 Datagridview Combobox 选定项的 TEXT?