1

私はxamlで次のようなものを持っています:

<Button Content="{Binding MyStopwatch.IsRunning,
        Converter={StaticResource BoolToStr}}"/>

が falseの場合は Start を表示し、 が true のIsRunning場合は Stopを表示する必要IsRunningがあります。コンバーターまたはバインディング自体に問題はありません。

プロパティの更新に問題がありIsRunningます。プログラムの実行中にIsRunning プロパティが変更されても、開始/停止テキストは変更されません。

INotifyPropertyChange自分のプロパティに実装する方法を知っています。しかし、プロパティの変更を実装する方法がわかりませんIsRunning

4

2 に答える 2

0

StopWatch実装することはできませんINotifyPropertyChanged。できることは、独自のラッパーを作成し、代わりにそれを使用することです。例えば:

public class StopwatchWrapper : INotifyPropertyChanged
{
    Stopwatch _stopwatch;

    private bool _isRunning;
    public bool IsRunning
    {
        get { return _isRunning; }
        set
        {
            if (_isRunning != value)
            {
                _isRunning = value;
                OnPropertyChanged("IsRunning");
            }
        }
    }

    public StopwatchWrapper()
    {
        _stopwatch = new Stopwatch();
        _isRunning = false;
    }

    public void Start()
    {
        _stopwatch.Start();
        IsRunning = _stopwatch.IsRunning;
    }

    public void Stop() 
    {
        _stopwatch.Stop();
        IsRunning = _stopwatch.IsRunning;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
于 2013-08-11T09:11:12.027 に答える
0

バインディングを更新する場合は、ストップウォッチを開始または停止するたびにPropertyChangedon プロパティを呼び出すことができます。MyStopwatch

OnPropertyChanged("MyStopwatch");
于 2013-08-11T09:11:22.993 に答える