我有一个视图模型,它定义了一个List<string>
。这是使用公开的ICollectionView
公开的:
List<string> _items { get; } = new List<string>() { "Test item" };
public ICollectionView CollectionView { get; }
....
CollectionView = CollectionViewSource.GetDefaultView(_items);
CollectionView.Filter = FilterItems;
CollectionView
对象还定义了一个FilterItems
函数来过滤列表。
在UI端,我有一个ListBox,它定义了一个数据模板并绑定到CollectionView
,并且一切正常。最初,我为每个列表框项目得到了这些警告:
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
但是我通过在窗口中添加适用于所有ListBoxItem
的样式来消除了它们:
<Window.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Window.Resources>
但是,每当我在Refresh()
上调用CollectionView
时,该样式似乎都不再适用,因为上面的两个警告会针对每个列表项再次出现!实际上,还有一些其他错误:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
这是怎么回事?为什么刷新集合时会忽略样式?
奇怪的是,我可以通过将样式移出Window.Resource并将其放入App.xaml中的Application.Resource中来解决此问题,但我不明白为什么会这样。
答案 0 :(得分:0)
这些绑定错误是无害的,并在内部进行处理,因此您可以放心地忽略它们,或取消它们。请参阅以下链接以获取更多信息。
解决WPF中无害的绑定错误: https://weblogs.asp.net/akjoshi/resolving-un-harmful-binding-errors-in-wpf
您可能还想阅读MSDN论坛上的this主题。