Это происходит из CollectionViewSource:
<CollectionViewSource
x:Key="CustomerGroups"
Source="{Binding Path=AllCustomers}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="IsCompany" />
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="IsCompany" Direction="Descending" />
<scm:SortDescription PropertyName="DisplayName" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
Когда вы используете CVS, он берет ваши данные (в данном случае набор экземпляров CustomerViewModel) и разбивает их на группы (в данном случае на основе свойства IsCompany).
Каждая группа помещается в CollectionViewGroup . Коллекция этих групп затем привязывается к элементу управления, который будет отображать группы. Таким образом, свойство Name фактически найдено в CollectionViewGroup и является значением IsCompany (это PropertyGroupDescription) или строковым значением логического значения.
Если вы измените привязку на что-то недопустимое
<DataTrigger Binding="{Binding Path=Derp}" Value="True">
<Setter TargetName="txt" Property="Text" Value="Companies" />
</DataTrigger>
вы увидите, что он перестает работать, и в вашем окне вывода появится следующее сообщение:
System.Windows.Data Ошибка: 39:
Ошибка пути BindingExpression: 'Derp'
свойство не найдено на «объекте»
'' CollectionViewGroupInternal
(HashCode = 41413147).
BindingExpression: Path = Derp;
DataItem = ' CollectionViewGroupInternal
(HashCode = 41413147); целевой элемент
'ContentPresenter' (Name = ''); цель
свойство «Нет цели» (тип «Объект»)
CollectionViewGroupInternal является внутренней реализацией CollectionViewGroup , которую CollectionViewSource использует для группировки вашей коллекции по свойству IsCompany