我有一个cache
对象,该类是这样的:
ObservableCollection<SchedulesInMonth>
计划表包含每天28-31个计划表的字典,以月中的某天为关键,一天的每个计划表由0-3个计划表组成,因为每天的工作班次为3。
如果我这样做:
public class SchedulesInMonth : INotifyPropertyChanged
{
private Dictionary<int, Dictionary<int, Schedule>> _schedules;
public Dictionary<int, Dictionary<int, Schedule>> Schedules
{
get => _schedules; set
{
_schedules = value;
OnPropertyChanged("Schedules");
}
}
// other property and method not related to this problem
// skipped for simplicity
}
即使更改了ObservableCollection,也不会更新数据网格。
编辑:
根据我的发现,如果我这样做:
ScheduleInMonths[row].Schedules[row].Clear();
绑定到ObservableCollection的数据网格已更新。
答案 0 :(得分:0)
您实际上在这里没有ObservableCollection。这是WPF中的一种特殊类型,具有许多有用的行为。您只是拥有一个符合INotifyPropertyChanges接口的属性(即使您的相同代码未显示该接口,我也假设您已经实现了该属性)。
第二个起作用的原因是因为您再次设置了字典...实际上您需要将其分配给某个东西以使其触发。您只有在分配新词典时才能获得更新,而在现有词典中更改值时却不会。不幸的是,没有内置的“ ObservableDictionary”类,因此您在这里没有很多好的选择。在此问题中,有很多关于此操作的有用建议:General Observable Dictionary Class for DataBinding/WPF C#