2

そのため、マイクロコントローラーとの通信から更新される40個程度のプロパティを持つクラスがあります。このクラスはINotifyPropertyChangedを実装します。

緩い例:

private int _Example;
public int Example
{
    get
    {
        return _Example;
    }
    set
    {
        _Example = value;
        OnPropertyChange("Example");
    }
}

そして、OnPropertyChange関数:

protected void OnPropertyChange(string p_Property)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(p_Property));
    }
}

public event PropertyChangedEventHandler PropertyChanged;

バインディング(これらの多く)

Second_Class_Control.DataBindings.Clear();
Second_Class_Control.DataBindings.Add("My_Property",  FirstClass,    "Example");

メインフォームでは、これらの値を表示して反応するようにバインドを設定しました。それらの1つは、別のクラスの別のプロパティにたまたま着陸します。このプロパティのset関数にブレークポイントを設定したところ、最初のクラスのプロパティが変更れるたびに呼び出されていることに気付きました。

これは正しい動作ですか?パフォーマンスへの影響はありませんが、これらのクラスの多くのインスタンスを一緒に実行する予定であり、これを予期していませんでした。

ありがとう

4

1 に答える 1

0

うーん.. OnPropertyChange 仮想があることに気付きました。これはなぜですか、どこかでオーバーライドを行っていますか?

私は通常、次のように作成します。

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

次に、使用法について:

public class MainWindowViewModel : ViewModelBase
{
    private string name;
    public string Name
    {
     get { return name; }
     set { name = value; OnPropertyChanged("Name"); }
    }
}
于 2012-10-05T20:32:55.457 に答える