2012-01-11 4 views
0

TreeView 데이터가 CollectionViewSource Groups 컬렉션에 바인딩되어 있습니다. 이것은 내가 CollectionViewSource의 힘을 사용하여 데이터를 표시 할 수 있도록하고, 데이터 자체도 계층 적 구조를 가지므로 TreeView가 필요한 이유입니다. TreeView의 SelectedItem에 바인딩 된 두 번째 컨트롤이 있습니다.컬렉션 트리 뷰의 소스 그룹보기 - 바인딩 오류

그룹 머리글을 선택하면 다음 예외가 발생하여 프로그램이 충돌합니다.

{"A TwoWay or OneWayToSource binding cannot work on the read-only property 'Name' of type 'MS.Internal.Data.CollectionViewGroupInternal'."} 

내 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 바인딩과 같은 오류이 한방향 결과에 바인딩을 변경하는 결과이다. 트리의 정보는 예상되는대로 표시되며 예외가 발생하는 경우에만 그룹 헤더가 선택됩니다.

+0

두 개의 이름 바인딩 중 오류를 일으키는 것이 무엇인지 확인 했습니까? 당신은 두 바인딩을 가지고있는 것처럼 보입니다. 하나는 Items에, 다른 하나는 Customers에 있습니다. 제쳐두고 실제로 여기서 양방향 바인딩이 필요합니까? –

답변

0

이 문제는 사용자 정의 컨트롤 내에서 양방향 바인딩으로 인해 발생했습니다. 나는 바인딩 된 객체의 유형을 확인하기 위해 변환기를 사용하여 끝냈다. 원하는 객체가 아니라면 무시했다.