我有以下问题:
我有一个名为File
的类,我希望这个类在发生特殊事件时通知另一个类,但File
不应该引用应该通知的类。我认为这是INotifyPropertyChanged
- 接口解决的问题。我唯一的解决方法是一个静态列表,其中包含应该被通知的类的实例和这个类的静态方法,但我认为这不是最聪明的方法。
那么,PropertyChanged
使用哪个概念?
修改:
让我们假设应该响应(被通知)的类被称为FileManager
,它有一个名为FinishedReading
的隐式事件,并且这个类只被实例化一次。
如果FileManager
不应该引用{{1},我怎样才能将FinishedReading
s FinishReading()
- 事件绑定到类File
的方法File
实例?
我已经尝试将FileManager
事件作为参数传递,但它没有用。
示例:
FileManager
答案 0 :(得分:0)
在这种情况下,我会使用事件,而不是使用一些静态方法。 INotifyPropertyChanged
是一种监听系统。 WPF-Systems会检查来自INotifyPropertyChanged
的绑定类,并在需要时调用方法PropertyChanged
。
第一个解决方案:
好的,在这种情况下,我会让FileManage成为单身,但你只有一个实例。在文件中,您可以调用FileManage.Singleton.FinishReading()
或类似的内容。
public class FileManager
{
private static readonly FileManager singleton = new FileManager();
public static FileManager Singleton
{
get { return FileManager.singleton; }
}
private FileManager()
{
}
public void FinishReading()
{
}
}
public class File
{
public void FinishReading()
{
//
FileManager.Singleton.FinishReading();
}
}
第二个解决方案:
您可以将FileManager类用作File
的工厂,并将委托设置为FinishReading()
。比你有一个很好的创建文件界面,而不必关心传递正确的参数。
public class FileManager
{
public FileManager()
{
}
public File CreateFile()
{
File f = new File(this.FinishReading);
return f;
}
public void FinishReading()
{
}
}
public class File
{
public delegate void FinishReadingDelegate();
private FinishReadingDelegate del;
public File(FinishReadingDelegate Del)
{
del = Del;
}
public void FinishReading()
{
//
del.Invoke();
}
}