PropertyChanged接口(事件系统)如何工作?

时间:2014-10-29 08:07:30

标签: c# wpf propertychanged

我有以下问题: 我有一个名为File的类,我希望这个类在发生特殊事件时通知另一个类,但File不应该引用应该通知的类。我认为这是INotifyPropertyChanged - 接口解决的问题。我唯一的解决方法是一个静态列表,其中包含应该被通知的类的实例和这个类的静态方法,但我认为这不是最聪明的方法。 那么,PropertyChanged使用哪个概念?

修改

让我们假设应该响应(被通知)的类被称为FileManager,它有一个名为FinishedReading的隐式事件,并且这个类只被实例化一次。 如果FileManager不应该引用{{1},我怎样才能将FinishedReading s FinishReading() - 事件绑定到类File的方法File实例? 我已经尝试将FileManager事件作为参数传递,但它没有用。

示例

FileManager

1 个答案:

答案 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();
    }
}