ObservableCollection包含Dictionary <int,dictionary <int,=“” <object =“” >>不会在更改时触发

时间:2018-07-21 02:05:11

标签: c# wpf data-binding

我有一个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的数据网格已更新。

1 个答案:

答案 0 :(得分:0)

您实际上在这里没有ObservableCollection。这是WPF中的一种特殊类型,具有许多有用的行为。您只是拥有一个符合INotifyPropertyChanges接口的属性(即使您的相同代码未显示该接口,我也假设您已经实现了该属性)。

第二个起作用的原因是因为您再次设置了字典...实际上您需要将其分配给某个东西以使其触发。您只有在分配新词典时才能获得更新,而在现有词典中更改值时却不会。不幸的是,没有内置的“ ObservableDictionary”类,因此您在这里没有很多好的选择。在此问题中,有很多关于此操作的有用建议:General Observable Dictionary Class for DataBinding/WPF C#