新手的问题。
我有两个c#类--一个代码类(比如,CodeClass)和一个表单类(例如,FormClass)。在CodeClass中,我将使用许多函数来定期更新类中的字符串(我可以使用属性或任何适当的方法)。当这个字符串值发生变化时,我需要一些通知其他类的方法。也就是说,我将尝试让FormClass订阅字符串消息上的更改事件,然后将值打印到文本框或类似的地方。但是,在将来的某个时候,我需要从CodeClass中提供API函数--所以基本上我需要一种方法来通知任何订阅类对字符串消息的更改(在CodeClass之外的任何地方都不会修改字符串消息--它发生在CodeClass中的函数中)。我尝试过事件和委托等,但这些似乎都是通过修改字符串消息(属性)的外部类来实现的。
问候等
发布于 2012-04-03 06:09:37
您需要实现INotifyPropertyChanged
接口:
class CodeClass : INotifyPropertyChanged
{
private string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
OnPropertyChanged("MyProperty");
}
}
#region INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
在FormClass
中,您可以订阅这样的PropertyChanged
事件:
codeClass.PropertyChanged += codeClass_PropertyChanged;
...
void codeClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName = "MyProperty")
{
...
}
}
发布于 2012-04-03 06:10:56
只需创建一个事件,并在字符串更改时触发该事件。
public class CodeClass
{
private string _someString;
public string SomeString
{
get { return _someString; }
set
{
_someString = value;
if (SomeStringChanged != null) { SomeStringChanged(value) }
}
}
public event Action<string> SomeStringChanged;
}
注意:有一种标准的方法可以这样做,即INotifyPropertyChanged接口,就像使用的另一个答案一样。这主要用于WPF和Silverlight,但您没有理由不能在Windows窗体中使用它。
https://stackoverflow.com/questions/9994959
复制