Development Tip

C # WPF의 콤보 상자에서 선택한 값 가져 오기

yourdevel 2020. 12. 9. 21:54
반응형

C # WPF의 콤보 상자에서 선택한 값 가져 오기


방금 Windows Forms 양식 대신 WPF 양식을 사용하기 시작했습니다. Windows Forms 양식에서 다음을 수행 할 수 있습니다.

ComboBox.SelectedValue.toString();

그리고 이것은 잘 작동합니다.

WPF에서 어떻게합니까? 옵션이없는 것 같습니다.


음 .. 더 간단한 해결책을 찾았습니다.

String s = comboBox1.Text;

이렇게하면 선택한 값을 문자열로 얻습니다.


이전 WF 형식과 비교하여 약간의 이상한 방법을 알아 냈습니다.

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();

XAML 파일에서 ComboBox의 이름을 설정했는지 확인합니다.

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

코드에서 SelectedItem속성을 사용하여 선택한 항목에 액세스 할 수 있습니다 .

MessageBox.Show(comboBox.SelectedItem.ToString());

내 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();

ComboBox에 바인딩 한 내용에 따라 다릅니다. MyObject라는 개체를 바인딩하고 Name이라는 속성이있는 경우 다음을 수행합니다.

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;

이것들은 어떻습니까?

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();

이 문제를 해결하는 것은 간단합니다. 내가 한 일은 XAML 코드에 "SelectedValuePath"를 추가하고 콤보 상자로 반환하려는 모델 속성에 바인딩하는 것뿐이었습니다.

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>

ComboBox SelectionChanged이벤트 처리기 의 변형 :

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}

이것은 주로 상자를 채우는 방법에 따라 다릅니다. DataTable(또는 다른 컬렉션)을 ItemsSource연결하여 수행하는 SelectionChanged경우 XAML의 상자에 이벤트 처리기를 연결 한 다음 코드 숨김에서 유용하게 사용할 수 있습니다.

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}

하나 있었다 - 나는의 다른 부분을 가지고 여기에이 개 다른 답변을보고 ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();비슷한 보이는,하지만에있는 상자를 캐스팅하지 않습니다 DataRowView: 내가 할 필요가 발견, 뭔가 다른 ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();, 사용 .SelectedItem대신에 .Items.GetItemAt(comboBox1.SelectedIndex). 그것은 효과가 있었을지도 모르지만 실제로 내가 위에서 쓴 두 가지의 조합이었고, .SelectedItem이 시나리오에서 나를 위해 효과가 없었어야한다는 점을 제외하고는 내가 왜 피했는지 기억하지 못합니다 .

상자를 동적으로 채우거나 ComboBoxItemXAML에서 드롭 다운의 항목을 직접 채우는 경우 다음 코드를 사용합니다.

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string val = String.Empty;
    if (cbx.SelectedValue == null)
        val = cbx.SelectionBoxItem.ToString();
    else
        val = cboParser(cbx.SelectedValue.ToString());
}

내가 가지고 있음을 볼 수 cboParser있습니다. 의 출력이 SelectedValue다음과 같기 때문 System.Windows.Controls.Control: Some Value입니다.. 적어도 내 프로젝트에서는 그랬습니다. 그래서 당신은 그것을 파싱해야 Some Value합니다.

private static string cboParser(string controlString)
{
    if (controlString.Contains(':'))
    {
        controlString = controlString.Split(':')[1].TrimStart(' ');
    }
    return controlString;
}

그러나 이것이이 페이지에 많은 답변이있는 이유입니다. 상자를 채우는 방법과 값을 다시 얻을 수있는 방법에 따라 크게 달라집니다. 어떤 상황에서는 대답이 옳고 다른 상황에서는 틀릴 수 있습니다.


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);
}

비슷한 문제가 있었고이 스레드에서 제안 된 여러 솔루션을 시도했지만 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>

씨#:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string chosenValue = e.AddedItems[0].ToString();
}

private void usuarioBox_TextChanged(object sender, EventArgs e)
{
    string textComboBox = usuarioBox.Text;
}

MsgBox(cmbCut.SelectedValue().ToString())

To get the value of the ComboBox's selected index in C# use:

Combobox.SelectedValue

It's the same principle.

You can either use SelectedIndex and use ComboBox.Items[SelectedIndex].ToString(). Or just ComboBox.SelectedItem and cast it to any type you need :)


Actually you can do it the following way as well.

Suppose your ComboBox name is comboBoxA. Then its value can be gotten as:

string combo = comboBoxA.SelectedValue.ToString();

I think it's now supported since your question is five years old.


Write it like this:

String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()

if you want to get the value and validate it you can do something like this

string index = ComboBoxDB.Text;
        if (index.Equals(""))
        {                
            MessageBox.Show("your message");
        }
        else
        {
            openFileDialog1.ShowDialog();
            string file = openFileDialog1.FileName;
            reader = new StreamReader(File.OpenRead(file));
        }

I use this code, and it works for me:

DataRowView typeItem = (DataRowView)myComboBox.SelectedItem; 
string value = typeItem.Row[0].ToString();

XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="19,123,0,0" Name="comboBox1" VerticalAlignment="Top" Width="33" ItemsSource="{Binding}" AllowDrop="True" AlternationCount="1">
    <ComboBoxItem Content="1" Name="ComboBoxItem1" />
    <ComboBoxItem Content="2" Name="ComboBoxItem2" />
    <ComboBoxItem Content="3" Name="ComboBoxItem3" />
</ComboBox>

C#:

if (ComboBoxItem1.IsSelected)
{
    // Your code
}
else if (ComboBoxItem2.IsSelected)
{
    // Your code
}
else if(ComboBoxItem3.IsSelected)
{
    // Your code
}

It works for me:

System.Data.DataRowView typeItem = (System.Data.DataRowView)ComboBoxName.SelectedItem;
string value = typeItem.DataView.ToTable("a").Rows[0][0].ToString();

참고URL : https://stackoverflow.com/questions/4351603/get-selected-value-from-combo-box-in-c-sharp-wpf

반응형