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
事件。
我的 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
事件。