Почему мой конвертер (на основе ListView.ItemsSource) не вызывается? - PullRequest
0 голосов
/ 17 января 2012

У меня есть небольшое приложение WPF, в котором у меня есть список файлов.Ниже списка файлов у меня есть кнопка «Загрузить».Я хотел бы, чтобы текст в кнопке загрузки отображал «Upload x files», где x - это количество элементов в списке.

Я использую конвертер, который принимает свойство ItemsSource в качестве входных данных и возвращает строку,однако, если я добавляю или удаляю элементы из списка (т. е. это базовая коллекция), конвертер в привязке кнопки не вызывается.

Что я делаю неправильно?

У меня есть базовый класс:

public class FileItem : INotifyPropertyChanged { ... }

и коллекция ObservableCollection:

public class Files : ObservableCollection<FileItem> {}

Я присваиваю коллекцию ListView.

lvw_FileList.ItemsSource = new Files();

ListView имеет привязанное свойство ItemSource.

<ListView x:Name="lvw_FileList" ItemsSource="{Binding Mode=OneWay}">
...
</ListView>

Кнопка, текстовое содержимое которой нуждается в преобразователе на основе ListView.ItemsSource.

<Button Content="{Binding ElementName=lvw_FileList, Path=ItemsSource, Converter={StaticResource UpdateButtonConverter}}" x:Name="btn_Upload" /> 

1 Ответ

2 голосов
/ 17 января 2012

Привязки слушают только PropertyChanged, а не CollectionChanged уведомлений. Если вам нужно запускать преобразование всякий раз, когда коллекция изменяется, рассмотрите MultiBinding как для коллекции, так и для ее свойства Count. Изменение количества приведет к переоценке, и значение сбора можно будет использовать в конвертере.

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