Właściwość zależności ObservableCollection nie została zaktualizowana podczas usuwania elementu w kolekcji
Mam dołączoną właściwość typu ObservableCollection w kontrolce. Jeśli dodam lub usunę elementy z kolekcji, interfejs użytkownika nie zostanie zaktualizowany. Jeśli jednak zastąpię kolekcję w środku nową, interfejs użytkownika ViewModel rzeczywiście się zaktualizuje.
Czy ktoś może mi podać przykład tego, co muszę zrobić w obiekcie zależności, aby mógł obsłużyć zmiany w kolekcji?
Część obiektu zależności jest wymieniona poniżej:
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));
}
}
Rozumiem, że muszę zarejestrować, że kolekcja uległa zmianie, ale nie jestem pewien, jak to zrobić we właściwości zależności
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Mam nadzieję, że to komuś pomoże.
Anonimowy użytkownik
Potwierdzenie od:
Jeśli twoja właściwość jest typem referencyjnym, wartość domyślna określona w metadanych właściwości zależności nie jest wartością domyślną dla każdej instancji; zamiast tego jest wartością domyślną i ma zastosowanie do wszystkich wystąpień tego typu. […]
Aby rozwiązać ten problem, należy zresetować wartość właściwości zależności kolekcji do unikatowego wystąpienia w ramach wywołania konstruktora klasy.
(cm.
właściwości zależności typu kolekcji
https://msdn.microsoft.com/en-us/library/aa970563(v=vs.110).aspx
MSDN )
Aby odpowiedzieć na pytanie Sama (właśnie napotkałem ten sam problem):
Ustaw program obsługi CollectionChanged jako statyczny i anuluj subskrypcję/ponowną subskrypcję na poziomie wystąpienia.