我一直在尝试找到一种方法来做看起来很简单的事情,但是我却一无所获。我只想在每次更新列表中的属性时增加一个计数器,但是我不想编写ChangeCount ++。在每个导致更改的If语句中,我希望它位于数据类中并且更加自动化。
我尝试在DataClass中编写Set方法,但是效果不佳,因为我需要向其传递三个参数,这使我无法使用+ =,这与编写ChangeCount ++;一样糟糕。我看着得到;组;尽管如果我添加自动增量来获得正确的计数,则当它进入集合时它总会显示为0。我使用INotifyPropertyChanged查看了ObservableCollection,但对于我想做的事情似乎过于复杂,尽管我确实认为这可能是唯一的选择,但是我对它的理解还不够,无法使其正常工作。
任何帮助将不胜感激。
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();
}
}
更新:我偶然发现this code似乎完全符合我的要求,尽管我仍然有兴趣查看其他建议。
((INotifyPropertyChanged)dc.items).PropertyChanged += (sender, e) =>
{
if (e.PropertyName != "Count")
dc.ChangeCount++;
};
好的,它仍然无法正常工作。如果我只是更改项目中的值并放回去,则不算作更改,它必须是完全不同的项目。
答案 0 :(得分:2)
Mb是这样的:
public class DataClass
{
public int ChangeCount => items.Sum(i => i.ItemChangeCount);
public List<Item> items { get; set; }
public class Item
{
public int ItemChangeCount { get; private set; } = 0;
private int _prop1;
public int Prop1
{
get => _prop1;
set { _prop1 = value; ItemChangeCount++; }
}
}
}