在Stopwatch.IsRunning上绑定开始/停止文本 - 属性已更改

时间:2013-08-11 09:03:14

标签: c# wpf stopwatch

我在xaml中有这样的东西:

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

IsRunning为假时,我需要显示开始,当IsRunning为真时,我需要显示停止。 我对转换器或绑定本身没有任何问题。

我在刷新IsRunning属性时遇到问题。 在程序运行时IsRunning 属性更改时,不会更改启动/停止文本。

我知道如何在我自己的属性上实现INotifyPropertyChange。 但我不知道如何在IsRunning

上实现(如类似)属性更改

2 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:0)

如果您想更新绑定,只要您开始或停止秒表,就可以在属性PropertyChanged上致电MyStopwatch

OnPropertyChanged("MyStopwatch");