c# - 无法清除组合框中的选择

标签 c# wpf xaml mvvm combobox

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

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

这是它绑定(bind)的属性:
    public int RequestingMember
    {
        get { return _requestingMember; }
        set
        {
            if (_requestingMember != value)
            {
                _requestingMember = value;
            }
        }
    }

这就是我用来清除盒子的东西:
this.RequestingMember = -1;

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

我试过设置 int为 0 并设置 UpdateSourceTrigger=PropertyChanged在 XAML 中,无济于事。我讨厌改变 RequestingMemeber类型为 int?因为它需要很长一段时间级联到应用程序的其他部分的修复。

我究竟做错了什么?

最佳答案

请阅读 Use SelectedValue, SelectedValuePath, and SelectedItem有关这方面的完整信息,请访问 MSDN 页面,但简而言之,通过数据绑定(bind)到 SelectedItem,您将获得更多运气。属性,而不是使用 SelectedValueSelectedValuePath特性。尝试向 SelectedItem 添加与集合和数据绑定(bind)中的项目相同类型的属性改为属性:

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

您还需要实现 INotifyPropertyChanged Interface在你的类中使用属​​性。您的 XAML 现在应该如下所示:
<ComboBox ItemsSource="{Binding Members}" DisplayMemberPath="MemberName" 
    SelectedItem="{Binding SelectedMember, Mode=TwoWay}" 
    IsEditable="{Binding FixedRequestingMember }" />

现在您需要做的就是清除选择:
SelectedMember = null;

关于c# - 无法清除组合框中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24265884/

相关文章:

c# - 窗体上的控件未在设计器中显示

C# FileNotFoundException 未被用户代码处理

c# - 使用在主线程中创建的 COM 对象无阻塞地运行一段代码

c# - 当应用程序未获得焦点时监听键

c# - 将 Treeviews 放在 TabControl 内容页面中

xaml 样式中的 WPF4 DataGridHeaderBorder

c# - 无法将类型为 'MessageBodyStream' 的对象转换为类型 'System.IO.MemoryStream'

c# - 无法创建库并链接到控制台应用程序

wpf - 如何在应用程序中放置/缩放 XAML 图形?

c# - WPF 的快捷键