Benutzer-Steuerelement mit benutzerdefinierten ItemsSource Abhängigkeitseigenschaft

Ich habe ein UserControl mit einer ItemsSource-Eigenschaft. Als Basis-UserControl-Klasse nicht implementiert ItemsSource, ich hatte, um meine eigene Abhängigkeit Eigenschaft wie folgt:

#region ItemsSource Dependency Property
    public static readonly DependencyProperty ItemsSourceProperty =
        DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(MonthViewControl),
        new PropertyMetadata(OnItemsSourceChanged));

    static void OnItemsSourceChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        (obj as MonthViewControl).OnItemsSourceChanged(e);
    }

    private void OnItemsSourceChanged(DependencyPropertyChangedEventArgs e)
    {
        RefreshLayout();
    }

    public IEnumerable ItemsSource
    {
        get
        {
            return (base.GetValue(ItemsSourceProperty) as IEnumerable);
        }
        set
        {
            base.SetValue(ItemsSourceProperty, value);
        }
    }

    #endregion

Nun in meinem ViewModel-ich habe eine Events-Eigenschaft, die eine ICollectionView von EventItem Elemente, etwa so:

private ObservableCollection<Controls.EventCalendar.EventItem> eventItems;
    private CollectionViewSource events;
    public System.ComponentModel.ICollectionView Events
    {
        get
        {
            if (events == null)
            {
                events = new CollectionViewSource();
                events.Source = eventItems;
            }

            return events.View;
        }
    }

Das Problem, das ich bin vor ist, dass in meinem Blick, wenn ich binden an die Events-Eigenschaft, und ich fügen Sie ein Element, um eventItems, das UserControl wird nicht ausgelöst, die ItemsSourceChanged Veranstaltung und damit auch nicht die Aktualisierung der Benutzeroberfläche.
Zum Wohle der Tests, die ich Hinzugefügt ein einfaches Listenfeld zur Ansicht, die auch bindet an die Events-Eigenschaft. Das funktioniert wie ein Charme. Updates für eventItems observableCollection spiegeln sich in der ListBox.

Ich bin herauszufinden es hat etwas zu tun mit meiner ItemsSource-Abhängigkeitseigenschaft. Vielleicht würde ich brauchen, um ein Benutzerdefiniertes Steuerelement verwenden, die erbt form ItemsControl statt ein UserControl?

Zu helfen, Sie verstehen mein problem: ich versuche einen Kalender erstellen, wie die Kontrolle, die zeigt events/agenda-Einträgen (ähnlich zu Google-Kalender). Es funktioniert wie ein Charme. Die Benutzeroberfläche wird aktualisiert, wenn die Steuerung angepasst wird. Das einzige, was übrig bleibt, ist das automatische update einmal die ItemsSource-änderungen.

Hoffe mir kann jemand helfen.

EDIT: Der moment, in dem ich geschrieben habe ich realisiert, dass das Ereignis kann nicht ausgelöst werden, da die ItemsSource-Eigenschaft nicht ändern. Es ist die zugrunde liegende Sammlung, die änderungen. Allerdings bin ich mir nicht, wie damit umzugehen ist. Was brauche ich, um zu implementieren, um diese Arbeit zu machen. Nur ein kleiner Tip würde reichen. Ich brauche nicht alle Einzelheiten der implementation.

Schreibe einen Kommentar