正在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
上实现(类似)属性更改
如果要更新绑定,可以在启动或停止秒表时调用属性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));
}
}