BindingList没有在DependecyProperty上触发PropertyChangedCallBack

时间:2015-09-02 00:19:34

标签: mvvm dependency-properties bindinglist

我的VM中有followin属性。

CameraSurfaceView

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

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

在我看来,我有以下依赖属性

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

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

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); }
        }

为什么不依赖属性触发propertyChangedCallback?

1 个答案:

答案 0 :(得分:1)

这是预期的行为,只有在属性本身发生变化时才会触发属性更改。如果您希望在列表项更改时收到通知,则需要将DP类型更改为INotifyCollectionChanged Interface,将列表本身更改为ObservableCollection并订阅/取消订阅 - 来自{{3}} DiasAgendadosProperty_Changed处理程序中的1}}事件。