我有一个与List结合的ComboBox。考虑我在列表中有10个项目,所以在组合框中也是如此。
目前在ComboBox中选择了第二个项目。
现在我在ComboBox中选择第3项。
在Combobox SelectionChanged事件中,我正在进行一些验证并且验证失败,因此我不希望我的选择从第2项更改为第3项或选择应保留在第2项。
请告诉我怎么做?
在ComboBox SelectionChanged事件中,我尝试设置ComboBox.SelectedItem = 2ndItem。
但这不能正常运作。
希望,我的要求很明确。如果您有任何疑问,请随时问我。
的问候,
VIMAL
答案 0 :(得分:1)
禁用该项目,以便用户看到它们当前不是一个选项(也无法选择)。您可以在ComboBoxItem上设置IsEnabled属性。
如果您使用MVVM,请将IsEnabled属性添加到ViewModel并将其绑定到容器的IsEnabled属性(ItemContainerStyle
)。
然而,IMO的最佳选择是,不要显示不可选择的项目。
<强>更新强>
正如评论中所承诺的那样,Dispatcher-Code设置的SelectedItem被延迟:
Dispatcher.BeginInvoke(new Action(delegate {
yourComboBox.SelectedItem=yourOldItem;
}), System.Windows.Threading.DispatcherPriority.ContextIdle, null);
我认为这会有所帮助,但不是很好。如果您有可能禁用或隐藏项目,这将更好。顺便说一句,我把ContextIdle用于调度程序优先级。这是一个非常强大的价值。您可以围绕哪个值来满足您的需求。
<强> CoerceValueCallback 强>
另一种可能性是从Combobox
派生,更改SelectedItem的元数据并向其添加CoerceValueCallback
。在那里,您可以重置该值。