ObservableCollection 型の XML Serializable List があります。このコレクションに変更が加えられるたびに、シリアル化してから逆シリアル化する必要があるように、イベントを実装しています。
武器を追加、削除、および変更できる外部クラス (武器エディター) があります。削除ボタンが押されるとすぐに、この WeaponsDB クラスにアクセスして ObservableCollection を収集します。ただし、CollectionChanged イベントが実行される前に、ObservableCollection 内の内容が更新されます。
CollectionChanged イベントが完全に実行され、他のクラスが最新のデータを取得する前にすべてが最新であることを確認するにはどうすればよいですか?
public class WeaponDatabase
{
[XmlArray("Weapons"), XmlArrayItem(typeof(Weapon), ElementName = "Weapon")]
public ObservableCollection<Weapon> Weapons = new ObservableCollection<Weapon>();
private string path = @"Inventory\WeaponsDB.xml";
public WeaponDatabase()
{
DeserializeData();
Weapons.CollectionChanged += Weapons_CollectionChanged;
}
void Weapons_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
SerializeData();
DeserializeData();
}
public void SerializeData()
{
XmlSerializer Serializer = new XmlSerializer(typeof(ObservableCollection<Weapon>));
TextWriter textWriter = new StreamWriter(path);
Serializer.Serialize(textWriter, Weapons);
textWriter.Close();
}
public void DeserializeData()
{
XmlSerializer Serializer = new XmlSerializer(typeof(ObservableCollection<Weapon>));
StreamReader reader = new StreamReader(path);
Weapons = (ObservableCollection<Weapon>)Serializer.Deserialize(reader);
reader.Close();
}
}