绑定按钮.启用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意味着有什么不同?任何反馈都将是很大的帮助。
你的引擎需要实现System.ComponentModel.INotifyPropertyChanged
接口有一个事件"ProperyChanged",当某些东西发生变化时,你的引擎必须触发该事件(至少如果你想要某些东西对该变化做出反应)
参见MSDN http://msdn.microsoft.com/en-gb/library/system.componentmodel.inotifypropertychanged%28v=vs.95%29.aspx
如果你是使用windows窗体作为文本建议,你需要引发一个事件或手滚委托回调
表单可以订阅事件/委托,并采取相应的行动。
如果您同意按照代码建议使用WPF,那么请接受DarkSquirrel42的建议并实现INotifyPropertyChanged
接口。