【问题标题】:Create event for variable in WPF在 WPF 中为变量创建事件
【发布时间】:2015-02-13 09:29:42
【问题描述】:

我有一个带有开始按钮的WPF 表单。单击它时,我正在调用另一个名为ClassA 的类的start 函数。

这是ClassA的代码:

    private DispatcherTimer m_dispatcherTimer = new DispatcherTimer();
    private int m_timerCounter;

    public bool IsRunning { get; private set; }

    private void DispatcherTimer_Tick(object sender, EventArgs e)
    {
        m_timerCounter ++;

        if (m_timerCounter == MaxCounter)
            Stop();
    }

    public void Start()
    {
        IsRunning = true;
        m_timerCounter = 0;
        m_dispatcherTimer.Start();
    }

    public void Stop()
    {
        m_dispatcherTimer.Stop();
        m_timerCounter = 0;
        IsRunning = false;
    }

这就是我想要的:

每当ClassA 的属性IsRunning 发生变化时,我想在表单的代码后面弹出一个消息框。

我可以使用while 循环对其进行监控并将其放入线程中,但我想避免它。

【问题讨论】:

  • 那么,是什么阻止了你?
  • "每当ClassA的属性IsRunning发生变化",你肯定要实现INotifyPropertyChanged接口。

标签: c# wpf events dependency-properties delegation


【解决方案1】:

你创建一个这样的事件:

//globals in ClassA
//create the handler delegate
public delegate void RunningChanged(bool isRunning);
//create the event
public event RunningChanged OnRunningChanged;

调用它:

//method in ClassA
private void SetRunning(bool running) 
{
    IsRunning = running;
    var handler = OnRunningChanged;
    if (handler != null)
    {
        handler(running);
    }
}

因此,在您的表单代码中,您可以执行以下操作:

var instance = new ClassA();
instance.OnRunningChanged += OnRunningChangedHandler;

private void OnRunningChangedHandler(bool isRunning)
{
     //do whatever you want to do when th running property changes
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2022-11-13
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多