DataGrid не будет отображать данные после обновления, если ObservableCollection имеет значение null при запуске - PullRequest
1 голос
/ 19 мая 2011

Надеюсь, я смогу это прояснить. У меня есть DataGrid

<DataGrid Grid.Row="6" Grid.Column="1"
            AutoGenerateColumns="False"
            CanUserAddRows="False"
            CanUserDeleteRows="False"
            ItemsSource="{Binding projectEntriesForEmployee}">

привязан к

    public ObservableCollection<ProjectEntry> projectEntriesForEmployee { 
        get { return (ObservableCollection<ProjectEntry>)GetValue(projectEntriesForEmployeeProperty); }
        set { SetValue(projectEntriesForEmployeeProperty, value); }
    }
    public DependencyProperty projectEntriesForEmployeeProperty = DependencyProperty.Register("projectEntriesForEmployee", typeof(ObservableCollection<ProjectEntry>), typeof(MainWindowVC));

Если я установлю projectEntriesForEmployee до того, как загружу свой UserControl (что я и сделал для отладки), мои строки будут правильно отображаться в DataGrid. Однако, если projectEntriesForEmployee имеет значение NULL, когда загружается UserControl, когда я устанавливаю для ProjectEntriesForEmployee допустимый ObservableCollection с элементами в списке (на основе события), в DataGrid строки не отображаются. Что может происходить?

Edit: Я пробовал

CollectionViewSource.GetDefaultView(projectEntriesForEmployee).Refresh();

но без радости.

Ответы [ 3 ]

1 голос
/ 19 мая 2011

Когда ваш элемент управления загружается, и ваш OC, и ваш DataSrid ItemsSource оба указывают на одно и то же: пустой фрагмент памяти.

Некоторое время спустя вы инициализируете свой OC для коллекции.Теперь ваш OC содержит коллекцию, но ItemSrid вашего DataGrid по-прежнему указывает на тот же нулевой фрагмент памяти.

Не можете ли вы просто инициализировать свой OC в конструкторе элемента управления?

EDIT

Я не гуру WPF, поэтому может быть причина для этого, но почему вы устанавливаете ObservableCollection как свойство зависимости?Если все, что вы делаете, это привязывает его к ItemsSource вашего DataGrid, обычное свойство vanilla C # будет работать нормально и все равно предоставит вам все автоматические обновления, которые происходят при добавлении или удалении из коллекции.

1 голос
/ 19 мая 2011

Я не уверен, что происходит, но я бы попробовал использовать Snoop , чтобы развернуть DataGrid и убедиться, что после обновления projectEntriesForEmployeeProperty DataContext DataGridпо-прежнему установлен соответствующий объект и для проверки привязки на ItemsSource.Если есть какие-либо ошибки привязки, Snoop покажет их, а также позволит вам углубиться в объект и увидеть полное выражение привязки.Просто предложение.

0 голосов
/ 19 мая 2011

Извините всех. Я ответил на свой вопрос, поскольку выясняется, что проблема заключалась в типе владельца свойства зависимости. У меня было это как MainWindowVC. Это должно было быть TimeEntryVC. Как только я это изменил, я прокомментировал сброс ItemsSource в классе Controller, и все заработало как надо. @Tim, вы правы, что система Binding заботится обо всем; Я просто сказал, чтобы искать имущество в неправильном классе. Спасибо всем, несмотря на то, что я лучше понимаю, что происходит сейчас за кулисами, чем раньше.

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