【问题标题】:Bind checkbox to Timer.Enabled将复选框绑定到 Timer.Enabled
【发布时间】:2017-07-05 14:35:41
【问题描述】:

是否可以将复选框绑定到 System.Timers.Timer 的 Enabled 属性?

我可以将它包装在一个返回其状态的布尔属性中,如下所示:

public bool TimerEnabled
    {
        get { return _timer.Enabled; }
        set
        {
            _timer.Enabled = value;
            InvokePropertyChanged(new PropertyChangedEventArgs("TimerEnabled"));
        }
    }

但是当 _timer.Autoreset = false 并且 _timer.Enabled 更改值时,我不会收到通知。

我想要一个复选框(“EnabledCheckbox”),其中显示计时器的当前状态,用户可以启用或禁用它。此外,我想要另一个复选框(“AutoResetCheckbox”)来控制此计时器是否启用了 Autoreset 属性。最后,如果 Autoreset 被禁用并且计时器触发 Elapsed 事件并因此将 Enabled 设置为 false,我希望“EnabledCheckbox”自行取消选中。

我如何做到这一点?

编辑:我可以自己实现自动重置,但有更好的方法吗?

【问题讨论】:

    标签: c# winforms binding


    【解决方案1】:

    将 _timer.Autoreset 包装成这样的属性:

    public bool Autoreset
    {
        get { return _timer.Autoreset; }
        set
        {
            _timer.Autoreset = value;
            InvokePropertyChanged(new PropertyChangedEventArgs(nameof(TimerEnabled));
            InvokePropertyChanged(new PropertyChangedEventArgs(nameof(Autoreset));
        }
    }
    

    然后使用属性而不是 _timer.Autoreset。

    【讨论】:

    • 这并不能解决我的问题。当我以编程方式修改它时触发它,但如果它设置为 false 并且发生 Elapsed 事件,TimerEnabled 不会改变值。
    猜你喜欢
    • 2013-04-06
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2014-03-20
    • 2012-09-10
    • 2012-02-20
    相关资源
    最近更新 更多