我有一个小的WPF应用程序,其中有一个文件列表。在文件列表下方,我有一个“上传”按钮。我希望上传按钮中的文字显示“上传x文件”,其中x是列表中的项目数。
我正在使用一个转换器,它将ItemsSource属性作为输入并返回字符串,但是如果我在listview中添加或删除项目(即它的底层集合),则不会调用按钮绑定上的转换器。
我做错了什么?
我有基类:
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" />
答案 0 :(得分:2)
绑定仅收听PropertyChanged
而非CollectionChanged
通知。如果您需要在集合更改时考虑对集合及其MultiBinding
属性Count
进行转换。计数更改将触发重新评估,并且可以在转换器中使用收集值。