Обновлять элементы списка при изменении источника данных - PullRequest
1 голос
/ 28 августа 2011

У меня есть список, который я использую в качестве журнала. Я хочу увидеть журнал в виде списка для этого, который я создал:

 <ListView Margin="12,114,12,12" Name="listView1" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" />

Журнал заполняется полем в классе, который я не создал, поэтому существует класс:

SomeClass
{

     public ReadOnlyCollection<Status> Log
     {
         get
         {
              return _log.AsReadOnly();
         }
     }

     // other method and fields
     // etc...

}

, поэтому я могу видеть элементы списка. Кроме того, я могу заполнить просмотр списка этим журналом как:

listView1.DataContext = server.Log;   // server is an instance of SomeClass

единственная проблема в том, что при каждом изменении журнала представление списка не обновляется. Я должен вызвать listView1.DataContext = server.Log; каждый раз, когда я хочу обновить журнал.

как мне избежать обновления списка?

1 Ответ

1 голос
/ 28 августа 2011

Вам нужно использовать ObservableCollection<Status> вместо ReadOnlyCollection<Status>

Причина этого заключается в том, что коллекция Observable уведомляет элементы управления, к которым она привязана, при добавлении / удалении элемента.

Если вы хотите, чтобы каждый объект Status уведомлял представление при изменении одного из их свойств (поэтому свойство в экземпляре Status изменяется, но в коллекции нет добавления / удаления), тогда Status имеет для реализации INotifyPropertyChanged, и каждое свойство должно вызывать событие PropertyChanged в своем установщике.

Вы можете сделать все это через состав также, если это сторонний dll.

Sidenote: почему у вас Margin выше 100? Вы должны использовать ContentPresenters, такие как Grid или StackPanels

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