为什么我的转换器(基于ListView.ItemsSource)没有被调用

本文关键字:调用 ItemsSource ListView 我的 转换器 基于 为什么 | 更新日期: 2023-09-27 18:20:25

我有一个小的WPF应用程序,其中有一个文件列表。在文件列表下面,我有一个"上传"按钮。我希望上传按钮中的文本显示"上传x个文件",其中x是列表中的项目数。

我使用的转换器将ItemsSource属性作为输入并返回字符串,但如果我从列表视图(即它的基础集合)中添加或删除项,则不会调用按钮绑定上的转换器。

我做错了什么?

我有基本类:

public class FileItem : INotifyPropertyChanged { ... }

和一个可观察的集合:

public class Files : ObservableCollection<FileItem> {}

一个I将集合分配给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" /> 

为什么我的转换器(基于ListView.ItemsSource)没有被调用

绑定只侦听PropertyChanged而不侦听CollectionChanged通知。如果需要在集合更改时运行转换,请考虑对集合及其Count属性使用MultiBinding。计数更改将触发重新评估,并且可以在转换器中使用集合值。