是否有一种简单的方法可以提示用户确认组合框选择更改,并且如果用户选择否则不处理更改?
我们有一个组合框,更改选择会导致数据丢失。基本上,用户选择一种类型,然后他们就可以输入该类型的属性。如果他们更改类型,我们将清除所有属性,因为它们可能不再适用。问题是要在选择下再次引发 SelectionChanged
事件。
这是一个片段:
if (e.RemovedItems.Count > 0)
{
result = MessageBox.Show("Do you wish to continue?",
"Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.No)
{
if (e.RemovedItems.Count > 0)
((ComboBox)sender).SelectedItem = e.RemovedItems[0];
else
((ComboBox)sender).SelectedItem = null;
}
}
我有两个解决方案,我都不喜欢。
用户选择'否'后,移除
SelectionChanged
事件处理程序,更改所选项目,然后注册SelectionChanged
再次事件处理程序。这意味着您必须保留类中事件处理程序的引用,以便您可以添加和删除它。创建一个
ProcessSelectionChanged
bool 值作为类的一部分。始终在事件处理程序开始时检查它。在我们将选择改回之前将其设置为 false,然后再将其重置为 true。这会起作用,但我不喜欢使用标志基本上使事件处理程序无效。
有人有替代解决方案或改进我提到的解决方案吗?
最佳答案
我发现了这个很好的实现。
private bool handleSelection=true;
private void ComboBox_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
if (handleSelection)
{
MessageBoxResult result = MessageBox.Show
("Continue change?", MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)
{
ComboBox combo = (ComboBox)sender;
handleSelection = false;
combo.SelectedItem = e.RemovedItems[0];
return;
}
}
handleSelection = true;
}
来源:http://www.amazedsaint.com/2008/06/wpf-combo-box-cancelling-selection.html
关于c# - 如何取消 ComboBox SelectionChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608128/