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

本文关键字:文本 属性 IsRunning Stopwatch 绑定 开始 正在 | 更新日期: 2023-09-27 18:27:23

我在xaml:中有这样的东西

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

IsRunning为false时,我需要显示Start,而当IsRunning为true时,我则需要显示Stop。我对转换器或绑定本身没有问题。

刷新IsRunning属性时出现问题。当程序运行时IsRunning属性更改时,它不会更改Start/Stop文本。

我知道如何在自己的属性上实现INotifyPropertyChange。但我不知道如何在IsRunning 上实现(类似)属性更改

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

如果要更新绑定,可以在启动或停止秒表时调用属性MyStopwatch上的PropertyChanged

OnPropertyChanged("MyStopwatch");

您不能使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));
    }
}