私はこれを理解できないようで、答えを見つけることができませんでした。
モデルのプロパティにバインドされた Combobox があります。コードのキー行をコピーして貼り付けるだけです。
this.m_typeCombobox.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.m_bindingSource, "Type", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
私のモデル:
public class TypeConfig : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private EnumType<eLType> m_type;
public EnumType<eLType> Type
{
get { return m_type; }
set
{
if (m_type!= value)
{
m_type= value;
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs("Type"));
}
}
}
コンボボックスの EditValueChanged イベントでモデルを更新する必要がありますが、後でモデルが更新されるようです。EditValueChanged は、変更時に最後に呼び出されたイベントです。
私はこれを試しました:
void m_TypeCombobox_EditValueChanged(object sender, EventArgs e)
{
m_bindingSource.EndEdit(); //this doesn't work
//need to have the new value here
}
MSDN の説明は次のとおりです。
EndEdit メソッドが呼び出されると、保留中のすべての変更が基になるデータ ソースに適用されます。データ ソースに含まれるオブジェクトが IEditableObject インターフェイスを実装しない限り、このメソッドは効果がありません。オブジェクトが IEditableObject インターフェイスを実装していない場合、データへの変更は、各変更の直後に基になるデータ ソースにコピーされます。
したがって、私の理解では、コンボボックスの値を変更するとすぐにモデルを更新する必要があります。
通常の WinForms コンボボックスとほぼ同じ DevExpress コンボボックスを使用しています。
どうすればこれを回避できますか?