Группировка исходного представления представления коллекции в древовидном представлении - ошибка привязки - PullRequest
0 голосов
/ 11 января 2012

У меня есть привязка данных TreeView к коллекции CollectionViewSource Groups.Это сделано для того, чтобы я мог отображать данные, используя возможности CollectionViewSource, а сами данные также имеют иерархическую структуру, поэтому мне нужен TreeView.У меня есть второй элемент управления, который привязан к SelectedItem TreeView.

Проблема заключается в том, что при выборе заголовка группы происходит сбой программы со следующим исключением.

{"A TwoWay or OneWayToSource binding cannot work on the read-only property 'Name' of type 'MS.Internal.Data.CollectionViewGroupInternal'."}
* 1005объекты в моем TreeView содержат свойство Name, которое двусторонне связано в другом элементе управления.Механизм привязки, кажется, находит свойство Name для группы и пытается привязаться к нему.Как я могу предотвратить возникновение этого исключения?Я бы хотел, чтобы остальная часть моей программы воспринимала это так, как будто ничего не выбрано, когда выбран заголовок группы, или не позволяю выбирать заголовок группы все вместе.Ниже приведена упрощенная версия кода.
        <TreeView
            x:Name="CustomersTree"
            ItemsSource="{Binding CustomersViewSource.Groups}"
            ItemTemplate="{StaticResource CustomerGroupsTemplate}">

        <MyUserControl DataContext="{Binding ElementName=CustomersTree, Path=SelectedItem, Mode=OneWay}" />

<HierarchicalDataTemplate x:Key="CustomerGroupsTemplate" ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource CustomerTreeItemTemplate}">
    <TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="CustomerTreeItemTemplate" ItemsSource="{Binding Customers}">
    <StackPanel>
        <Image Source="{Binding ImageSource}" />
        <TextBlock Text="{Binding Path=Name}" />
    </StackPanel>
</HierarchicalDataTemplate>

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

1 Ответ

0 голосов
/ 20 января 2012

Проблема была результатом двусторонней привязки в пользовательском элементе управления.В итоге я использовал конвертер, чтобы проверить тип связываемого объекта, игнорируя его, если это не тот объект, который я хотел.

...