似乎我的多重绑定存在问题。
方案:
我有一个带有两个日期选择器和一个列表视图的窗口。
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正常更新。 有什么想法吗?
答案 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
来手动调用更新。