WPFデータバインディングでいくつかの本質的な概念が欠けているような気がします。私のバインディングが私にとってうまくいくかどうかは、いつものことです。TreeViewItem.IsExpandedにバインドします。なぜこれは機能しますか?
この例では、TreeViewItemのIsExpandedプロパティをバインドされたオブジェクトの対応するプロパティに双方向でバインドしたいとします。これは最初の例で動作します。それは第二のものではありません。
誰でも理由を説明できますか?私はなぜ2番目のバージョンが動作しないのか理解できません。私ができれば悲しみを救うことはできないと思う。
UserControl.Resourcesに配置されたとき、これは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>
DataTemplateは、上記のデータテンプレートを使用して、次のXamlフラグメントで使用されます。ドキュメントは、正しくバインドされたFolderItemの観測可能リストです。
<TreeView ItemsSource="{Binding Documents}" />
両方のデータテンプレートがファイルツリーを示します。しかし、2番目のケースでは、IsExpandedのバインド(双方向またはその他)はありません。
FileItemののFolderItemののリーフノードであるためDataTemplatingされることが示されていない..
Arg。この例では示されていませんでしたが、TreeViewにもItemTemplateがあり、これはDataTemplateよりも優先されます。しかし、あなたは正しいです:データテンプレートは、TreeViewコントロールがTreeViewItemラッパーをデータテンプレートのオブジェクトの周りに置き、TreeViewItem(他のコントロールと違って)が既にTreeViewItemかどうかを確認しません。ありがとう。あなたが正しく指摘した、本質的な誤解で盲目になった。 –