GridViewColumn не подписывается на событие PropertyChanged в ListView - PullRequest
0 голосов
/ 07 апреля 2010

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

<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 для объектов подписки равно нулю. Это озадачивает, потому что я думал, что WPF должен подписаться на событие PropertyChanged объектов данных, которые реализуют INotifyPropertyChanged. Я что-то здесь не так делаю?

1 Ответ

2 голосов
/ 07 апреля 2010

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

...