C#WPFのコンボボックスから選択した値を取得します

2010年12月04日に質問されました。  ·  閲覧回数 342.7k回  ·  ソース

Boardy picture
2010年12月04日

Windowsフォームフォームの代わりにWPFフォームを使い始めたところです。 Windowsフォームフォームでは、次のことができます。

ComboBox.SelectedValue.toString();

そして、これはうまくいくでしょう。

WPFでこれを行うにはどうすればよいですか? オプションがないようです。

回答

Boardy picture
2010年12月05日
84

古いWFフォームと比較して、少し奇妙な方法を見つけました。

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();
Moile picture
2012年06月07日
82

まあ..私はもっと簡単な解決策を見つけました。

String s = comboBox1.Text;

このようにして、選択した値を文字列として取得します。

The Smallest picture
2010年12月04日
11

XAMLファイルでComboBoxの名前を設定していることを確認してください。

<ComboBox Height="23" Name="comboBox" />

コードでは、 SelectedItemプロパティを使用して選択したアイテムにアクセスできます。

MessageBox.Show(comboBox.SelectedItem.ToString());
Kuntal Ghosh picture
2014年12月04日
11

私のXAMLは次のとおりです。

<ComboBox Grid.Row="2" Grid.Column="1" Height="25" Width="200" SelectedIndex="0" Name="cmbDeviceDefinitionId">
    <ComboBoxItem Content="United States" Name="US"></ComboBoxItem>
    <ComboBoxItem Content="European Union" Name="EU"></ComboBoxItem>
    <ComboBoxItem Content="Asia Pacific" Name="AP"></ComboBoxItem>
</ComboBox>

コンテンツは、テキストとWPFコンボボックスの名前として表示されています。 選択したアイテムの名前を取得するために、次のコード行に従います。

ComboBoxItem ComboItem = (ComboBoxItem)cmbDeviceDefinitionId.SelectedItem;
string name = ComboItem.Name;

WPFコンボボックスの選択したテキストを取得するには:

string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString();
b00sted &#39;snail&#39; picture
2015年05月14日
7

これらはどうですか:

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();
Benny picture
2010年12月04日
6

これは、ComboBoxにバインドしたものによって異なります。 MyObjectというオブジェクトをバインドし、たとえばNameというプロパティを持っている場合は、次のようにします。

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;
Oleg S. picture
2015年11月10日
4

ComboBox SelectionChangedイベントハンドラーのバリアントとして:

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}
Myron William picture
2012年10月21日
3

この問題の解決は簡単です。 XAMLコードに「SelectedValuePath」を追加し、コンボボックスで返したいモデルプロパティにバインドするだけでした。

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>
Ben Broadley picture
2015年06月05日
3

同様の問題があり、このスレッドで提案されているいくつかの解決策を試しましたが、ComboBoxアイテムが実際に更新されて新しい選択が表示される前に、SelectionChangedイベントが発生していることがわかりました(つまり、変更前に常にコンボボックスの内容が表示されていました)発生)。

これを克服するには、コンボボックスから直接値をロードするよりも、イベントハンドラーに自動的に渡されるeパラメーターを使用する方がよいことがわかりました。

XAML:

<Window.Resources>
    <x:Array x:Key="Combo" Type="sys:String">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
    </x:Array>
</Window.Resources>
<Grid>
    <ComboBox Name="myCombo" ItemsSource="{StaticResource Combo}" SelectionChanged="ComboBox_SelectionChanged" />
    <TextBlock Name="MyTextBlock"></TextBlock>
</Grid>

C#:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string chosenValue = e.AddedItems[0].ToString();
}
Vinay Kumar picture
2013年08月03日
2

ComboBox SelectionChangedイベントを作成し、WPFデザインでItemsSource = "{Binding}"を設定します。

コード:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
    MessageBox.Show(ob);
}