ObservableCollection propriété de dépendance n'a pas mis à jour lorsque l'élément dans la collection est supprimé
J'ai une propriété attachée de type ObservableCollection sur un contrôle. Si je ajouter ou supprimer des éléments de la collection, l'interface utilisateur n'est pas mise à jour. Cependant si je remplace la collecte à l'intérieur avec un nouveau le ViewModel l'interface de mise à jour.
Quelqu'un peut-il me donner un exemple de ce que je dois faire dans la Dépendance de l'objet de sorte qu'il peut gérer les changements au sein de la collection?
Partie de l'objet de dépendance sont énumérés ci-dessous:
public class RadCalendarBehavior : DependencyObject
{
private static void OnSpecialDaysChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var calendar = d as RadCalendar;
if (e.NewValue != null)
{
calendar.DayTemplateSelector = new SpecialDaySelector((ObservableCollection<DateTime>)e.NewValue, GetSpecialDayTemplate(d));
}
}
public static ObservableCollection<DateTime> GetSpecialDays(DependencyObject obj)
{
return (ObservableCollection<DateTime>)obj.GetValue(SpecialDaysProperty);
}
public static void SetSpecialDays(DependencyObject obj, ObservableCollection<DateTime> value)
{
obj.SetValue(SpecialDaysProperty, value);
}
public static readonly DependencyProperty SpecialDaysProperty =
DependencyProperty.RegisterAttached("SpecialDays", typeof(ObservableCollection<DateTime>), typeof(RadCalendarBehavior), new UIPropertyMetadata(null, OnSpecialDaysChanged));
}
}
Je comprends que j'ai besoin de vous inscrire que la collection a changé, mais je suis pas sûr de la façon de le faire à l'intérieur de la propriété de dépendance
Vous devez vous connecter pour publier un commentaire.
Un changement au sein de la collection ne déclenchent pas la
OnSpecialDaysChanged
de rappel, parce que la valeur de la propriété de dépendance n'a pas changé. Si vous avez besoin de réagir à détecter les changements avec la collection de, vous devez gérer l'événementCollectionChanged
événement manuellement:C'est juste pour ajouter à la réponse de Thomas. Dans mon code je n'interagissent pas avec la DependencyObject propriétés par la création d'un gestionnaire d'objet en local comme ci-dessous:
Espère que c'est utile à quelqu'un.
Si vous avez une collection de type propriété de dépendance gardez les points suivants à l'esprit:
(voir MSDN Type De Collection De Propriétés De Dépendance)
Pour répondre à Sam question (je viens de tomber sur le même problème):
Faire de votre CollectionChanged-gestionnaire de non-statique et/se désabonner vous inscrire de nouveau sur le niveau de l'instance.