I've got a static class (DataFormSubject) that holds a generic List object, as follows:
private static List<DataForm> dataForms = new List<DataForm>();
Other classes that rely on this list need to be told when the list is updated, so I created a custom event, and associated methods that could trigger when an item is added or removed, as follows:
public delegate void DataFormsUpdatedHandler(object sender);
public static event DataFormsUpdatedHandler DataFormsUpdatedEvent;
public static void AddDataForm(DataForm df)
{
dataForms.Add(df);
if (DataFormsUpdatedEvent != null)
DataFormsUpdatedEvent(df);
}
public static void RemoveDataForm(DataForm df)
{
dataForms.Remove(df);
if (DataFormsUpdatedEvent != null)
DataFormsUpdatedEvent(df);
}
The List is available from the static class via a property, as follows:
public static List<DataForm> DataForms
{
get { return dataForms; }
//set { dataForms = value; }
}
But the problem here is that the client can now bypass the update event by accessing the property and doing a direct add or remove on the class! E.g.
DataFormSubject.DataForms.Add(new DataForm);
How can I prevent this, or is there a better way of acheiving what I want? Ideally what I would like is an update event on the List class that observers can subscribe to!