我觉得我在WPF数据绑定中缺少一些基本概念.我的装订是否会对我有用,这总是一杆三风.
在此示例中,我希望将TreeViewItem的IsExpanded属性双向绑定到绑定对象上的相应属性.它确实适用于第一个例子; 它与第二个没有关系.
有谁能解释为什么?我无法理解为什么第二个版本不起作用.如果可以的话,我不禁想到它会拯救我无尽的悲伤.
这在放入UserControl.Resources时有效(绑定到IsExpanded是通过应用于TreeViewItem的Style完成的:
<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>
Run Code Online (Sandbox Code Playgroud)
这不(在数据模板中直接绑定到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>
Run Code Online (Sandbox Code Playgroud)
DataTemplate用于以下Xaml片段,上面给出的数据模板用于执行数据转换.Documents是已正确绑定的FolderItems的可观察列表.
<TreeView ItemsSource="{Binding Documents}" />
Run Code Online (Sandbox Code Playgroud)
两个DataTemplates都显示文件树.但在第二种情况下,IsExpanded没有绑定(双向或其他方式).
未显示FileTtem的DataTemplating,它是FolderItem的叶节点.
问题是它TreeViewItem实际上是一个自己使用的包装器TreeView.它不需要(也不应该)成为你的一部分DataTemplate,因为你现在所拥有的是TreeViewItem在a中创建一个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>
Run Code Online (Sandbox Code Playgroud)
(不幸的是我现在无法测试,但至少应该让你朝着正确的方向前进).
保持原样的样式以继续绑定属性.
| 归档时间: |
|
| 查看次数: |
3979 次 |
| 最近记录: |