C# Stopwatch.IsRunning上的绑定开始/停止文本-属性已更改
我在xaml中有类似的内容:C# Stopwatch.IsRunning上的绑定开始/停止文本-属性已更改,c#,wpf,stopwatch,C#,Wpf,Stopwatch,我在xaml中有类似的内容: <Button Content="{Binding MyStopwatch.IsRunning, Converter={StaticResource BoolToStr}}"/> 当IsRunning为false时,我需要显示Start;当IsRunning为true时,我需要显示Stop。 我对转换器或绑定本身没有问题 我在刷新IsRunning属性时遇到问题。 当正在运行时在程序运行时属性更改,它不会更改启动/停止文本 我知道如
<Button Content="{Binding MyStopwatch.IsRunning,
Converter={StaticResource BoolToStr}}"/>
当IsRunning
为false时,我需要显示Start;当IsRunning
为true时,我需要显示Stop。
我对转换器或绑定本身没有问题
我在刷新IsRunning
属性时遇到问题。
当正在运行时
在程序运行时属性更改,它不会更改启动/停止文本
我知道如何在自己的属性上实现INotifyPropertyChange。
但是我不知道如何在
IsRunning
上实现(类似)属性更改您不能使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));
}
}
如果要更新绑定,可以在启动或停止秒表时调用属性MyStopwatch上的
PropertyChanged
OnPropertyChanged("MyStopwatch");
绑定到CLR属性时无法获得更改通知,该属性必须是依赖项属性,或者该类应实现INotifyPropertyChanged。将秒表包装到实现INotifyPropertyChanged的类中,并在调用Start/Stop后更改IsRunning。@Islam-这根本不是真的。我们可以绑定到CLR属性,而无需实现INPC。唯一的问题是绑定不会在属性发生任何更改时在GUI上刷新。@Rohit这就是我的意思!编辑了注释。但是在这种情况下,在
MyStopwatch
上提升PropertyChanged
就可以了,因为它是绑定本身的一部分。这不起作用。我不是在等MyStopwatch的财产。但是我正在等待MyStopwatch。IsRunning…你的类是MyStopwatch
所在的地方吗执行INPC
,因为我累了它对我来说工作正常吗?你的完整绑定路径是MyStopwatch.IsRunning
,所以万一MyStopwatch上的propertyChanged也被引发,它将刷新UI上的绑定。唯一的另一种方法是拥有您自己的定制秒表,它将在开始和停止时引发事件,您可以连接到这些事件,如另一个答案中所述。Ok.Ok。谢谢你的评论和回答。