足够简单的要求 - 尝试在用户按下"清除"时重置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?
类型,因为它需要修复程序,这些修补程序会很长时间地进入应用程序的其他部分。
我做错了什么?
答案 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 }" />