WPF 데이터 바인딩에서 필수 개념이 빠져있는 것처럼 느껴집니다. 제 바인딩이 저에게 효과가 있는지 여부는 언제나 맞습니다.TreeViewItem.IsExpanded에 바인딩. 왜이게 효과가 있니?
이 예제에서는 TreeViewItem의 IsExpanded 속성을 바인딩 된 개체의 해당 속성에 양방향으로 바인딩하려고합니다. 첫 번째 예에서 작동합니다. 그것은 둘째로하지 않습니다.
이유를 설명 할 수 있습니까? 두 번째 버전이 작동하지 않는 이유를 이해할 수 없습니다. 할 수만 있다면 슬픔을 덜어 줄 수 있다고 생각할 수 없습니다.
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded"
Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
</Style>
<DataTemplate DataType="{x:Type viewModels:FolderItem}">
<TreeViewItem ItemsSource="{Binding Folders}"
IsExpanded="{Binding Mode=TwoWay,Path=IsExpanded}" >
<TreeViewItem.Header>
<StackPanel Orientation="Vertical">
<Image Source="{Binding IconSource}"
Width="16" Height="16"
Margin="4,0,4,0" VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}"
VerticalAlignment="Center" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</DataTemplate>
이) 데이터 템플릿으로 IsExpanded에 (직접 바인딩하지 않습니다 :
<DataTemplate DataType="{x:Type viewModels:FolderItem}">
<TreeViewItem ItemsSource="{Binding Folders}"
IsExpanded="{Binding Path=IsExpanded,Mode=TwoWay}" >
<TreeViewItem.Header>
<StackPanel Orientation="Vertical">
<Image Source="{Binding IconSource}"
Width="16" Height="16" Margin="4,0,4,0"
VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}"
VerticalAlignment="Center" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</DataTemplate>
(으로 IsExpanded에 바인딩
UserControl.Resources에 배치 할 때 작동
은 TreeViewItem에 적용되는 스타일로 이루어집니다
DataTemplate은 데이터 변환을 수행하는 데 사용 된 위에 제공된 데이터 템플릿을 사용하여 다음 Xaml 조각에서 사용됩니다. 문서는 올바르게 바인딩 된 FolderItems의 관찰 가능한 목록입니다.
<TreeView ItemsSource="{Binding Documents}" />
두 데이터 템플릿 모두 파일 트리를 보여줍니다. 그러나 두 번째 경우에는 IsExpanded에 바인딩 (양방향 또는 기타)이 없습니다.
FileItem의 FolderItem의의 리프 노드입니다있는 DataTemplating되어 표시되지 않음..
Arg. 예제에서 보이지는 않지만, TreeView에는 ItemTemplate이 있으며, 이는 DataTemplate보다 우선합니다. 하지만 당신은 맞습니다 : 데이터 템플릿 개체 주위에 TreeViewItem 래퍼를 넣고 TreeViewItem (다른 컨트롤과는 달리) TreeViewItem 이미 있는지 확인하지 않습니다 전에 데이터를 템플릿이 발생합니다. 감사. 당신이 올바르게 지적한 근본적인 오해가 눈이 먼 것. –