MultiVinding with MultiValueConverter不会更新

时间:2011-04-07 15:45:01

标签: wpf xaml data-binding

似乎我的多重绑定存在问题。

方案:
我有一个带有两个日期选择器和一个列表视图的窗口。 listliew包含一些称为“条目”的数据绑定元素。一个条目有一个名为“date”的属性。

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

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

<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>

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

使用这样的正常数据绑定:

<ListView ItemsSource="{Binding Entries}">
  ...
</ListView>

listview正常更新。 有什么想法吗?

2 个答案:

答案 0 :(得分:10)

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

<MultiBinding Converter="{Resources:ListToStringConverter}">
    <Binding Path="List.Count" />
    <Binding Path="List" />
</MultiBinding>

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

答案 1 :(得分:4)

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

也许您可以订阅收藏集的CollectionChanged事件并举办PropertyChanged个活动,或者在BindingExpression内获取MultiBinding来手动调用更新。