gpt4 book ai didi

wpf - 绑定(bind)到 TreeViewItem.IsExpanded。为什么这行得通?

转载 作者:行者123 更新时间:2023-12-04 14:22:30 25 4
gpt4 key购买 nike

我觉得我在 WPF 数据绑定(bind)中缺少一些基本概念。我的绑定(bind)是否对我有用总是成问题的。

在此示例中,我想将 TreeViewItem 的 IsExpanded 属性双向绑定(bind)到绑定(bind)对象上的相应属性。它确实适用于第一个示例;它不与第二个。

谁能解释为什么?我不明白为什么第二个版本不起作用。我不禁想到,如果可以的话,它会为我省去无尽的悲伤。

这在放置在 UserControl.Resources 中时有效(绑定(bind)到 IsExpanded 是使用应用于 TreeViewItem 的样式完成的:

    <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>

这不会(直接绑定(bind)到数据模板中的 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 片段,上面给出的数据模板用于执行数据转换。 Documents 是已正确绑定(bind)的可观察的 FolderItems 列表。
   <TreeView ItemsSource="{Binding Documents}" />

两个 DataTemplate 都显示文件树。但是在第二种情况下 IsExpanded 没有绑定(bind)(双向或其他方式)。

未显示 FileItem 的 DataTemplating,它们是 FolderItem 的叶节点。

最佳答案

问题是 TreeViewItem实际上是 TreeView 使用的包装器本身。它不需要(也不应该)成为您的 DataTemplate 的一部分,因为您现在拥有的是创建 TreeViewItemTreeViewItem 内(外层由 TreeView 创建,内层是模板的一部分)。

这就是你的风格有效的原因,因为它适用于所有 TreeViewItem s,你声明的那个(最终变得毫无意义)和由 TreeView 创建的那个.

你应该做的是更换你的DataTemplate有了这个:

<HierarchicalDataTemplate ItemsSource="{Binding Folders}">
<StackPanel Orientation="Vertical">
<Image Source="{Binding IconSource}"
Width="16" Height="16" Margin="4,0,4,0"
VerticalAlignment="Center" />
<TextBlock Text="{Binding Title}"
VerticalAlignment="Center" />
<HierarchicalDataTemplate>

(不幸的是,我目前无法测试,但这至少应该让你朝着正确的方向前进)。

保留您的样式以继续绑定(bind)属性。

关于wpf - 绑定(bind)到 TreeViewItem.IsExpanded。为什么这行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com