绑定按钮.启用c# dll中的属性

本文关键字:属性 dll 按钮 启用 绑定 | 更新日期: 2023-09-27 17:50:17

我目前正在编写一个c# dll,用作希望使用它的GUI应用程序(windows窗体)的后端引擎。引擎可以处于几种预先定义的状态之一,例如加载,空闲,工作等,这些状态由后台工作器控制。我希望使用此dll的GUI应用程序能够执行操作并将控制属性绑定到引擎内的属性,特别是引擎的当前状态。例如,我希望使用引擎的应用程序根据引擎是否运行来禁用操作和控件。为此,我在引擎中创建了一个只读属性,如下所示:

public Class Engine
{
    // Make the class a singleton
    private static Engine instance;
    public static Engine Instance
    {
        get
        {
            if (instance == null)
                instance = new Engine();
            return instance;
        }
    }
    // ... Class code altering the engines current state
    public bool Property IsActive
    {
        get
        {
            return (EngineState != State.Idle);
        }
    }
}

其中State是所有可能状态的枚举数,EngineState是当前状态。为了测试这个属性,我写了一个快速的windows表单应用程序,我想要一个按钮被启用,如果引擎是活动的。要做到这一点,我已经尝试绑定Enabled属性,像这样:

public Class TestApp
{
    Engine MyEngine = Engine.Instance;
    TestApp
    {
        Button_DoAction.DataBindings.Add("Enabled", MyEngine, "IsActive");
    }
    // ... Button handlers etc.
}

这个绑定似乎在应用程序第一次加载时工作,但是当属性IsActive在dll中改变时,即引擎从Active变为Idle,按钮的Enabled属性不会改变。

所以我只是想知道我想做的是否可能?事实上,引擎是一个单一的,是写在一个外部dll意味着有什么不同?任何反馈都将是很大的帮助。

绑定按钮.启用c# dll中的属性

你的引擎需要实现System.ComponentModel.INotifyPropertyChanged

接口有一个事件"ProperyChanged",当某些东西发生变化时,你的引擎必须触发该事件(至少如果你想要某些东西对该变化做出反应)

参见MSDN http://msdn.microsoft.com/en-gb/library/system.componentmodel.inotifypropertychanged%28v=vs.95%29.aspx

如果你是使用windows窗体作为文本建议,你需要引发一个事件或手滚委托回调

表单可以订阅事件/委托,并采取相应的行动。

如果您同意按照代码建议使用WPF,那么请接受DarkSquirrel42的建议并实现INotifyPropertyChanged接口。