Свойства зависимостей Silverlight ObservableCollection не обновляются в режиме разработки - PullRequest
2 голосов
/ 02 февраля 2011

Я использую свойство зависимости типа ObservableCollection<> в моем элементе управления. Я хочу автоматически изменять отображение содержимого в моем элементе управления при редактировании XAML кода. Я пишу такой код:

public class RowInfoCollection : ObservableCollection<RowInfo>
{
}

//... here my control class
    public static readonly DependencyProperty RowDataProperty = 
        DependencyProperty.Register("RowData", typeof(RowInfoCollection), typeof(VisiGrid), 
        new PropertyMetadata(new RowInfoCollection(), RowDataChangedCallback));

    public RowInfoCollection RowData
    {
        get
        {
            return (RowInfoCollection)base.GetValue(RowDataProperty);
        }
        set
        {
            base.SetValue(RowDataProperty, value);
        }
    }

    private static void RowDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        VisiGrid vg = d as VisiGrid;
        vg.rowData = (RowInfoCollection)e.NewValue;
        vg.rowData.CollectionChanged += vg.rowData_CollectionChanged;
        // Some application specific logic skipped
    }

    void rowData_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        rowData = RowData;
        switch (e.Action)
        {
            // Skipped
        }
    }

Во время выполнения все работает нормально. Но когда я изменяю значение свойства в конструкторе VS2010, возникают некоторые проблемы. Когда я полностью удаляю значение или вставляю его вместо пустого VS, конструктор успешно обновляет отображение моего элемента управления. Но когда я добавляю или удаляю элементы коллекции по одному, изменений нет. Когда я строю проект, дисплей обновляется (фактически, дизайнер перезагружается).

Когда я заглянул в отладчик, то увидел, что в режиме разработки он успешно вызывает мою функцию обратного вызова, когда коллекция полностью удалена или вставлена, но не вызывает событие CollectionChanges, когда оно частично изменяется.

Как мне заставить дизайнера VS отслеживать изменения коллекции и запускать события?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...