2012-01-11 5 views
0

TreeViewデータをCollectionViewSource Groupsコレクションにバインドしました。これは、私がCollectionViewSourceの能力を使ってデータを表示できるようにするためであり、データそのものも階層構造を持っているため、TreeViewが必要です。 TreeViewのSelectedItemにバインドされている2番目のコントロールがあります。コレクションツリービューでのソースグループの表示 - バインディングエラー

グループヘッダを選択すると、次の例外を除いてプログラムがクラッシュするという問題があります。

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

ツリービューのオブジェクトには、別のコントロールで2つの方法でバインドされた名前プロパティが含まれています。バインディングエンジンは、グループの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

2つの名前バインディングのどちらがエラーの原因であるかを確認しましたか?あなたはそのようなバインディングを2つ持っているようです.1つはItemsに、もう1つはCustomersにあります。さて、実際にここで双方向のバインディングが必要ですか? –

答えて

0

この問題は、ユーザーコントロール内の双方向バインディングの結果でした。私はバインダーされているオブジェクトのタイプをチェックするためにコンバーターを使用してしまいました。

関連する問題