MultiVinding with MultiValueConverter不会更新

Mic*_*lus 8 data-binding wpf xaml

好像我的multibinding有问题.

场景:
我有一个带有两个日期选择器和一个列表视图的窗口.listliew包含一些称为"条目"的数据绑定元素.条目具有名为"date"的属性.

我只想让我的listview显示日期在我的两个日期选择日期之间的条目.

我的xaml代码用于将listview绑定到条目和日期:

<ListView.ItemsSource>
  <MultiBinding Converter="{StaticResource EntriesFilterConv}"
                UpdateSourceTrigger="PropertyChanged">
    <Binding Path="Entries" UpdateSourceTrigger="PropertyChanged"/>
    <Binding ElementName="EntryFromDate" Path="SelectedDate"
             UpdateSourceTrigger="PropertyChanged"/>
    <Binding ElementName="EntryToDate" Path="SelectedDate"
             UpdateSourceTrigger="PropertyChanged"/>
  </MultiBinding>
</ListView.ItemsSource>
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.当SelectedDate发生更改时调用我的转换器,但在条目更改时从不调用它.

使用这样的普通数据绑定:

<ListView ItemsSource="{Binding Entries}">
  ...
</ListView>
Run Code Online (Sandbox Code Playgroud)

列表视图正常更新.任何的想法?

Pro*_*fet 11

搜索了几个小时后,我找到了一个简单而体面的答案!由于ObservableCollection不会引发PropertyChanged事件而是CollectionChanged,我们只需要绑定集合的Count以在列表更改时触发事件:

<MultiBinding Converter="{Resources:ListToStringConverter}">
    <Binding Path="List.Count" />
    <Binding Path="List" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)

关于这个完美工作的多绑定的原始信息:https://stackoverflow.com/a/10884002/817504

  • 建议不要这样做,因为它可能会导致内存泄漏,如您所见:[链接](https://support.microsoft.com/en-us/kb/938416).这是因为该属性不是依赖属性而且没有实现INotifyPropertyChanged,所以WPF必须"绑定"到该属性的唯一方法是使用PropertyDescriptor,它附加一个PropertyChanged事件,导致对该属性的硬引用. (5认同)

H.B*_*.B. 5

我认为以下可能会导致这种情况:如果您直接绑定到EntriesListView 将监听CollectionChanged事件,但如果这样的绑定在内部MultiBinding,唯一会导致重新评估的可能是PropertyChanged通知,对于 Entries 属性可能不存在在你的模型中。

也许您可以订阅CollectionChanged您收藏的PropertyChanged事件并引发一个事件,或者让BindingExpressionMultiBinding手动调用更新。