无法清除组合框中的选择

时间:2014-06-17 14:02:59

标签: c# wpf xaml mvvm combobox

足够简单的要求 - 尝试在用户按下"清除"时重置WPF组合框。按钮。除了这个ComboBox之外,表单上的其他所有内容都会按预期清除。

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

这是它所绑定的财产:

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

以下是我用来清除方框的内容:

this.RequestingMember = -1;

值得一提的是,在Members集合中没有任何内容对应于-1的键。无论如何,当您按清除时,该值不会从其选择中改变。

我已经尝试将int设置为0并在XAML中设置UpdateSourceTrigger=PropertyChanged,但无济于事。我不愿意将RequestingMemeber更改为int?类型,因为它需要修复程序,这些修补程序会很长时间地进入应用程序的其他部分。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

请阅读MSDN上的Use SelectedValue, SelectedValuePath, and SelectedItem页面以获取有关此内容的完整信息,但简而言之,您可以通过数据绑定到SelectedItem属性获得更多运气,而不是使用{{1} }和SelectedValue属性。尝试添加与集合中的项目相同类型的属性,并将数据绑定到SelectedValuePath属性:

SelectedItem

您还需要在类中使用属​​性实现INotifyPropertyChanged Interface。你的XAML现在应该是这样的:

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

现在您需要做的就是清除选择:

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