Стиль, игнорируемый при обновлении ICollectionView - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть модель представления, которая определяет 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 для фильтрации списка.

На стороне пользовательского интерфейса у меня есть 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 s:

<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 и поместив его в Application.Resource в App.xaml, но я не понимаю, почему это так.

1 Ответ

0 голосов
/ 19 ноября 2018

Эти ошибки привязки безвредны и обрабатываются внутри, поэтому вы можете просто игнорировать их или подавлять.Для получения дополнительной информации см. Следующую ссылку.

Устранение безвредных ошибок привязки в WPF: https://weblogs.asp.net/akjoshi/resolving-un-harmful-binding-errors-in-wpf

Возможно, вы также захотите прочитать this ветка на форумах MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...