ValueChanged is fired only when the user changes the value, not when you bind and the binding changes the value.
We already solved the problem like that:
public
partial class MyComboEditor : UltraComboEditor
{
/// <summary>
/// Occurs when the value is about to be changed
/// </summary>public event EventHandler<CancelNewEventArgs> ValueChanging;
/// <summary>
/// Holds the previous value in order to allow rollback
/// </summary>protected object m_OldValue;
private bool m_SkipValueChanging;public MyComboEditor()
{
InitializeComponent();
m_OldValue = null;
}
/// <summary>
/// Rollbacks the value changing if ValueChanging was cancelled
/// </summary>
/// <param name="args"></param>protected override void OnValueChanged(EventArgs args)
{
if (!m_SkipValueChanging)
{
CancelNewEventArgs e = new CancelNewEventArgs();
OnValueChanging(e);
if (e.Cancelled)
{
m_SkipValueChanging = true;
if (m_OldValue == null)this.SelectedItem = null;
else
Value = m_OldValue;
m_SkipValueChanging = false;
}
}
base.OnValueChanged(args);
}
protected virtual void OnValueChanging(CancelNewEventArgs args)
{
if (ValueChanging != null)
{
ValueChanging(this, args);
}
}
public override object Value
{
get
{
return base.Value;
}
set
{
base.Value = value;
m_OldValue = Value;
}
}
}