Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF, how to reset combobox after selection is made

I'd like to reset a combobox after every selection is made, to a default text value. This question was asked very well here but that solution didn't work for me at all. A solution that did make sense to me is to set SelectedIndex to -1 and reset Text as shown below

MainWindow.xaml

<ComboBox Name="combobox" SelectionChanged="ComboBox_SelectionChanged" IsEditable="True" IsReadOnly="True" Text="My Default Text">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="Background" Value="Blue"/>
            <Setter Property="BorderBrush" Value="Blue"/>
            <Setter Property="BorderThickness" Value="0"/>
         </Style>
     </ComboBox.ItemContainerStyle>
     <ComboBoxItem Name="selection0">selection0</ComboBoxItem>
     <ComboBoxItem Name="selection1">selection1</ComboBoxItem>
     <ComboBoxItem Name="selection2">selection2</ComboBoxItem>
     <ComboBoxItem Name="selection3">selection3</ComboBoxItem>
     <ComboBoxItem Name="selection4">selection4</ComboBoxItem>
</ComboBox>

MainWindow.xaml.cs

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string name = selectedItem.Name;
        if (selectedItem != null)
        {
            MessageBox.Show(string.Format(string));

            //This does set the combobox to empty, but no text is added.
            this.combobox.SelectedIndex = -1;
            this.combobox.Text = "My Default Text";
        }
     }

The SelectedIndex does successfully go to -1, but it stays empty. I'd like the text to go back to what it originally says, but I've had no luck. Any help is appreciated.

like image 993
trueCamelType Avatar asked Jan 19 '26 05:01

trueCamelType


2 Answers

Once you've obtained the selected item, you can reset the ComboBox back to its default state, but you must do so in a separate Dispatcher message:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (this.combobox.SelectedItem != null)
    {
        MessageBox.Show(this.combobox.SelectedItem.ToString());
    }

    Action a = () => this.combobox.Text = "My Default Text";
    Dispatcher.BeginInvoke(a);
}

If you try to do it in the same message then your changes are effectively superseded by WPF's internal logic that runs once your event handler has completed.

like image 180
Kent Boogaart Avatar answered Jan 20 '26 17:01

Kent Boogaart


I use the DropDownOpened event in code behind to reset the ComboBox every time it is opened.

    public partial class ChangeArticleAndSoftwareBundleRevisionDialog : UserControl
    {
        public Dialog()
        {
             InitializeComponent();

             ComboBox.DropDownOpened += ComboBox_DropDownOpened;
        }

        private void ComboBox_DropDownOpened(object sender, System.EventArgs e)
        {
              ComboBox combobox = (sender as ComboBox);

              combobox.SelectedIndex = 0;
              combobox.SelectedValue = null;
              combobox.SelectedItem = null;
        }
    }
like image 34
Michael Santos Avatar answered Jan 20 '26 17:01

Michael Santos