【发布时间】:2011-12-22 18:12:32
【问题描述】:
是否有一种简单的方法来提示用户确认组合框选择更改并且如果用户选择否则不处理更改?
我们有一个组合框,更改选择会导致数据丢失。基本上,用户选择一种类型,然后他们就可以输入该类型的属性。如果他们更改类型,我们将清除所有属性,因为它们可能不再适用。问题是在选择下你再次引发SelectionChanged 事件。
这是一个sn-p:
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;
}
}
我有两个解决方案,我都不喜欢。
用户选择'No'后,移除
SelectionChanged事件处理器,更改选中项,然后重新注册SelectionChanged事件处理器。这意味着您必须保留类中事件处理程序的引用,以便您可以添加和删除它。创建一个
ProcessSelectionChanged布尔值作为类的一部分。始终在事件处理程序开始时检查它。在我们更改选择之前将其设置为 false,然后将其重置为 true。这会起作用,但我不喜欢使用标志来使事件处理程序无效。
任何人都有替代解决方案或对我提到的解决方案的改进?
【问题讨论】:
-
它很旧但stackoverflow.com/questions/314503/… 有帮助吗?
-
我正要说你为什么不使用javascript来做这个检查,但后来我注意到它的winform应用程序很抱歉:(。
-
bool 标志是标准解决方案。不让用户通过简单地不将其包含在 Items 集合中来选择项目是很好的解决方案。
-
不知道你的意思是不包括项目集合中的项目。列表中没有一个特定项目导致此问题,它是对所选项目的任何更改。我想让他们更改类型,ComboBox 包含可用类型的列表,但如果他们确实选择了新类型,我想先警告他们并允许他们退出。
-
注意:
SelectionChanged不是 WinFormsComboBox上的事件处理程序,只有 WPFComboBox,所以我正在编辑问题和标签以修复。
标签: c# wpf combobox selectionchanged