作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得我在 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>
<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>
<TreeView ItemsSource="{Binding Documents}" />
最佳答案
问题是 TreeViewItem
实际上是 TreeView
使用的包装器本身。它不需要(也不应该)成为您的 DataTemplate
的一部分,因为您现在拥有的是创建 TreeViewItem
在 TreeViewItem
内(外层由 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>
关于wpf - 绑定(bind)到 TreeViewItem.IsExpanded。为什么这行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123719/
我是一名优秀的程序员,十分优秀!