J'ai une propriété attachée de type ObservableCollection sur un contrôle. Si j'ajoute ou supprime des éléments de la collection, l'interface utilisateur ne se met pas à jour. Toutefois, si je remplace la collection par une nouvelle, le ViewModel est mis à jour par l'interface utilisateur. Est-ce que quelqu'un peut me donner un exemple de ce que j'ai besoin de faire dans l'objet de dépendance pour qu'il puisse gérer les changements au sein de la collection?La propriété de dépendance ObservableCollection ne se met pas à jour lorsque l'élément de collection est supprimé
Une partie de l'objet de dépendance est 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 je dois enregistrer que la collection a changé, mais je ne suis pas sûr comment faire cela dans la propriété de dépendance
Merci. Est-il possible d'obtenir une référence de l'objet de dépendance dans SpecialDays_CollectionChanged? – GoalMaker
Quel objet de dépendance? Vous voulez dire le RadCalendar? Pas facilement ... de toute façon, je ne suis pas sûr que ça aurait du sens: et si plusieurs instances de RadCalendar sont liées à la même collection? –
Je vois ce que tu veux dire. J'essayais de faire en sorte que RadCalendar ne mette plus en évidence un jour spécial s'il était retiré de la collection, alors j'ai pensé que je pourrais le faire en créant un SpecialDaySelector et en définissant le DayTemplateSelector du contrôle Calendar. – GoalMaker