0

コードで「フラグをクリア」しようとしています。UI に継続的に表示されるデータがあり、コードが「クリア」ボタンで実行されているときに、ユーザーがデータをクリアできるようにしたいと考えています。UI スレッドでデータを収集および更新する 2 番目のスレッドがあります。プロパティでフラグを使用して、「クリア フラグ」が true であると判断された場合に所定の値になるようにしようとしました。クリアボタンを押すと、「クリアフラグ」をtrueに設定してデータをクリアしますが、問題はいつ完了したかを知り、完了時に「クリアフラグ」をfalseに戻すことです。

private bool _clear;
public bool Clear
{
    get
    {
        return _clear;
    }
    set
    {
        _clear = value;
        OnPropertyChanged("Clear");

        if (value)
        {
            OnPropertyChanged(String.Empty);
        }
    }
}

private int _motorRPM;
public int MotorRPM
{
    get
    {
        return _motorRPM;
    }
    set
    {
        _motorRPM = value;
        OnPropertyChanged("MotorRPM");
    }
}


private int _aveRPM;
public int AveRPM
{
    get
    {
        return _aveRPM;
    }
    set
    {
        if (Clear)
        {
            _aveRPM = 0;
        }
        else
        {
            _aveRPM = (_aveRPM + value) / 2;
        }
        OnPropertyChanged("AveRPM");
    }
}


private int _minRPM = Int32.MaxValue;
public int MinRPM
{
    get
    {
        return _minRPM;
    }
    set
    {
        if (Clear)
        {
            _minRPM = Int32.MaxValue;
        }
        else
        {
            if (value < _minRPM)
            {
                _minRPM = value;
            }
        }
        OnPropertyChanged("MinRPM");
    }
}


private int _maxRPM;
public int MaxRPM
{
    get
    {
        return _maxRPM;
    }
    set
    {
        if (Clear)
        {
            _maxRPM = 0;
        }
        else
        {
            if (value > _maxRPM)
            {
                _maxRPM = value;
            }
         }
         OnPropertyChanged("MaxRPM");
    }
}

ご覧のとおり、「Clear」プロパティがあり、true に設定すると OnPropertyChanged(String.Empty) を使用してすべてのプロパティの更新を呼び出し、「Clear」が true の場合に各プロパティが既知の値になります。

すべての PropertyChanged イベントが完了したときに Clear を false に戻すにはどうすればよいですか?

4

1 に答える 1

0

ニクラスが言ったように、私はこう言いました:このようにしないでください!ViewModel の PropertyChanged の目的は、UI を更新することです。プロパティの変更に応じて何らかのロジックがあった場合、デバッグするのは悪夢です!

所有物をできるだけ清潔に保ちます。いくつかの依存値を更新するには、次のようにする方がよいでしょう:

private bool _clear;
public bool Clear
{
    get
    {
        return _clear;
    }
    set
    {
        _clear = value;
        OnPropertyChanged("Clear");

        if (_clear)
          ClearValues();
    }
}

public void ClearValues()
{
   AveRPM=0;
   MinRPM=0;
   MaxRPM=0;
   ...
   Clear=False;
}

完璧ではありませんが、私にははるかに読みやすく、保守しやすいようです。

それが役に立てば幸い。

于 2013-04-30T06:18:08.813 に答える