WinFormでオブジェクトイベントを発生させる必要があります。オブジェクトのプロパティが変更されたときに、(UIで)制御状態を変更する必要があります。UIでオブジェクトイベントを発生させるにはどうすればよいですか?
編集:フォームでは、オブジェクトのプロパティにバインドされた2つのドロップダウンがあります。最初のドロップダウンの選択がfalseの場合、2番目のドロップダウンを無効にする必要があります。
オブジェクトのイベントを発生させることはできません。オブジェクトのみがイベントを発生させることができます。サブスクライブできるのはオブジェクトのイベントのみです。なんで?イベントは実際にはハンドラーを追加および削除するためのメソッドのペアであるためです。これは、どこからでも呼び出すことができるデリゲートタイプのプロパティと同じではありません。
したがって、オブジェクトがそのイベントを発生させるようなことを行う必要があります。イベントを直接発生させる方法はありません。
INotifyPropertyChanged
使用例は次のとおりです。
// your object
public class Foo : INotifyPropertyChanged
{
private bool _bar;
public bool Bar
{
get { return _bar; }
set {
if (_bar == value)
return;
_bar = value;
OnPropertyChanged("Bar");
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
そして、コントロールをこのオブジェクトにバインドします。
yourControl.DataBindings.Add("Enabled", foo, "Bar");
プロパティが変更されるとBar
、fooオブジェクトがイベントを発生させ、コントロールがそのイベントを処理します。
オブジェクトがすでに実装している場合は、クラスINotifyPropertyChanged
内で次のことを実行できます。WinForm
yourObject.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name") {
//Check the value of the property here, etc...
button1.Enabled = false;
}
};
その例でName
は、は監視するプロパティです。