2

以下を使用して、ドメイン オブジェクト プロパティを System.Windows.Forms.Label の Text プロパティにバインドしていますDataBindings

Label l = new Label();
l.DataBindings.Add(new Binding("Text",myDomainObject,"MyProperty"));

ただし、ドメイン オブジェクトを変更すると、Label に変更が反映されません。DataGridView のような複雑なコントロールの場合、ResetBindings を呼び出すことができる BindingSource を使用してバインディングを実行できることはわかっていますが、Label の単純なケースでバインディングを更新する方法が見つかりませんでした。

4

2 に答える 2

7

ケントは正しい答えを持っていますが、インターフェイスの適用について少し補足したいと思いINotifyPropertyChangedます。

イベントを簡単に発生させるには、これを試してください

protected void OnPropertyChanged<T>(Expression<Func<T>> property)
{
    if (this.PropertyChanged != null)
    {
        var mex = property.Body as MemberExpression;
        string name = mex.Member.Name;
        this.PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

そしてそれを次のように適用します

{ // inside some method or property setter
    OnPropertyChanged(() => this.MyProperty);
}

これが名前でプロパティを指定するよりも優れている唯一の理由は、リファクタリングするか、プロパティの名前を変更するだけで、実装を手動で変更する必要がなく、コンパイラにすべての参照の名前を自動的に変更させることができるからです。

于 2011-02-23T19:39:11.700 に答える
3

ドメイン オブジェクトはINotifyPropertyChangedを実装して、基になるプロパティがいつ変更されたかをバインディングが認識できるようにする必要があります。

于 2009-01-04T18:56:34.000 に答える