Я пытался найти способ сделать что-то, что кажется таким простым, но я ничего не могу с этим поделать. Я просто хочу увеличивать счетчик каждый раз, когда обновляю свойство в списке, но я не хочу писать ChangeCount ++; внутри каждого оператора If, который приводит к изменению, я хочу, чтобы он был в классе данных и был более автоматическим.
Я пытался написать метод Set в DataClass, но это не сработало, так как мне нужно было передать ему три параметра, это мешало мне использовать + =, и это было так же плохо, как написание ChangeCount ++ ;. Я посмотрел на получить; задавать; и хотя счет увеличился правильно, если я добавил автоинкремент, чтобы получить, он всегда получал 0, когда в наборе. Я посмотрел на ObservableCollection с использованием INotifyPropertyChanged, но это кажется слишком сложным для того, что я хочу сделать, хотя я чувствую, что это может быть единственным вариантом, однако я не понимаю этого достаточно, чтобы заставить его работать.
Любая помощь будет высоко ценится.
public class DataClass
{
public int ChangeCount { get; set; }
public List<Item> items { get; set; }
public class Item
{
...
...
...
}
}
public class ProgramClass
{
public static void doStuff()
{
var dc = new DataClass();
dc.items = new List<Item>();
//List gets populated with lots of items...
//loop list items with lots of if statements leading to possible
//changes which should trigger the counter to increase.
//e.g.
dc.items[i].someProperty += 10;
//Now I want:
If (dc.ChangeCount > 0) BackupOriginalFileAndWriteNewFile();
}
}
Обновление: я только что наткнулся на этот код , который, кажется, делает именно то, что я хочу, хотя мне все еще интересно видеть другие предложения.
((INotifyPropertyChanged)dc.items).PropertyChanged += (sender, e) =>
{
if (e.PropertyName != "Count")
dc.ChangeCount++;
};
ОК, это все еще не работает. Если я просто изменю значения элемента и верну его обратно, это не будет считаться изменением, это должен быть совершенно другой элемент, вставленный.