2010-04-07 5 views
0

У меня есть ListView с GridView, который связан со свойствами класса, который реализует INotifyPropertyChanged, как это:GridViewColumn не подписавшись на PropertyChanged событие в ListView

<ListView Name="SubscriptionView" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" ItemsSource="{Binding Path=Subscriptions}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Width="24" CellTemplate="{StaticResource IncludeSubscriptionTemplate}"/> 
      <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=Name}" Header="Subscription"/> 
      <GridViewColumn Width="75" DisplayMemberBinding="{Binding Path=RecordsWritten}" Header="Records"/> 
      <GridViewColumn Width="Auto" CellTemplate="{StaticResource FilenameTemplate}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

Класс выглядит следующим образом:

public class Subscription : INotifyPropertyChanged 
{ 
    public int RecordsWritten 
    { 
     get 
     { 
      return _records; 
     } 
     set 
     { 
      _records = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("RecordsWritten")); 
     } 
    } 
    private int _records; 

    ... 
} 

Поэтому я запускаю BackgroundWorker и начинаю записывать записи, обновляя свойство RecordsWritten и ожидая изменения значения в пользовательском интерфейсе, но это не так. Фактически, значение PropertyChanged в объектах Subscription равно null. Это головоломка, потому что я думал, что WPF должен подписаться на событие PropertyChanged объектов данных, которые реализуют INotifyPropertyChanged. Я здесь что-то не так?

ответ

2

Выяснил проблему. Список «Подписки» пришел из запроса LINQ. Когда я добавил .ToList() в конец этого запроса, пользовательский интерфейс начал правильно обновляться.

Смежные вопросы