BindingList 未触发 DependecyProperty 上的 PropertyChangedCallBack

BindingList not firing PropertyChangedCallBack on DependecyProperty

我的 VM 中有以下 属性。

private BindingList<DateTime> diasAgendados = new BindingList<DateTime>();
public BindingList<DateTime> DiasAgendados
        {
            get { return diasAgendados; }
            set { diasAgendados = value; RaisePropertyChanged("DiasAgendados"); }
        }

以及下面的方法为VM中的BindingList添加新项

private void AgregarFecha(DateTime agendar_fecha)
        {
            if (!DiasAgendados.Contains(agendar_fecha))
                DiasAgendados.Add(agendar_fecha);
        }

在我看来我有以下依赖关系属性

public static readonly DependencyProperty DiasAgendadosPropiedad = DependencyProperty.Register("DiasAgendados", typeof(BindingList<DateTime>),
            typeof(CalendarioView), new FrameworkPropertyMetadata(new PropertyChangedCallback(DiasAgendadosProperty_Changed)));

        private static void DiasAgendadosProperty_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var obj = (CalendarioView)sender;
            if (e.NewValue != null && obj.SelectedMes > 0 && obj.SelectedAnio > 0)
                obj.PintarCalendario((BindingList<DateTime>)e.NewValue);
        }

        public BindingList<DateTime> DiasAgendados
        {
            get { return (BindingList<DateTime>)GetValue(DiasAgendadosPropiedad); }
            set { SetValue(DiasAgendadosPropiedad, value); }
        }

现在,如果我在 VM 中手动设置已默认填充的新绑定列表到 属性,属性ChangedCallback 将触发。 但是,如果尝试将新项目添加到 VM 中的绑定列表,则不会触发。 我已经尝试过以下修复:

if (!DiasAgendados.Contains(agendar_fecha))
            {
                diasAgendados.Add(agendar_fecha);
                RaisePropertyChanged("DiasAgendados");
            }

为什么依赖 属性 上的 属性ChangedCallback 没有触发?

这是预期的行为,属性 更改仅应在 属性 本身更改时触发。如果您想在列表项更改时收到通知,那么您需要将 DP 类型更改为 INotifyCollectionChanged Interface, change the lists themselves to something like ObservableCollection 和 subscribe-to/unsubscribe-from 它们在 DiasAgendadosProperty_Changed 处理程序中的 CollectionChanged 事件。