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