Bob Tway
Bob Tway

Reputation: 9613

Unable to clear selection in a combobox

Simple enough requirement - trying to reset a WPF combobox on user press of a "clear" button. Everything else on the form clears as expected, with the exception of this ComboBox.

<ComboBox ItemsSource="{Binding Members}" DisplayMemberPath="MemberName" SelectedValue="{Binding RequestingMember, Mode=TwoWay}" SelectedValuePath="MemberID" IsEditable="{Binding FixedRequestingMember }"></ComboBox>

Here's the property it's bound to:

    public int RequestingMember
    {
        get { return _requestingMember; }
        set
        {
            if (_requestingMember != value)
            {
                _requestingMember = value;
            }
        }
    }

And here's what I'm using to clear the box:

this.RequestingMember = -1;

Worth mentioning that there's nothing in the Members collection which corresponds to a key of -1. The value doesn't change from its selection when you press clear, anyway.

I've tried setting the int to 0 and also setting UpdateSourceTrigger=PropertyChanged in the XAML, to no avail. I'm loathe to change RequestingMemeber to a type of int? as it'll need fixes that cascade a long way into other parts of the application.

What am I doing wrong?

Upvotes: 1

Views: 3133

Answers (1)

Sheridan
Sheridan

Reputation: 69985

Please read the Use SelectedValue, SelectedValuePath, and SelectedItem page on MSDN for the full information on this, but in short, you will have more luck by data binding to the SelectedItem property, rather than using the SelectedValue and SelectedValuePath properties. Try adding a property of the same type as the items in the collection and data binding that to the SelectedItem property instead:

public Member SelectedMember // Implement the INotifyPropertyChanged Interface here!!
{
    get { return selectedMember; }
    set
    {
        if (selectedMember != value)
        {
            selectedMember = value;
            NotifyPropertyChanged("SelectedMember");
        }
    }
}

You will also need to implement the INotifyPropertyChanged Interface in your class with the properties. Your XAML should now look like this:

<ComboBox ItemsSource="{Binding Members}" DisplayMemberPath="MemberName" 
    SelectedItem="{Binding SelectedMember, Mode=TwoWay}" 
    IsEditable="{Binding FixedRequestingMember }" />

Now all you need to do to clear the selection is this:

SelectedMember = null;

Upvotes: 1

Related Questions