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

时间:2012-01-17 01:06:13

标签: c# wpf xaml data-binding

我有一个小的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" /> 

1 个答案:

答案 0 :(得分:2)

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