我希望使用附加属性将命令分配给嵌入在树视图中的组合框的选择更改事件。我正在尝试在树的hierchical数据模板中设置附加属性,但命令未设置,并且在组合框中的项目更改时不会触发。
我发现直接在数据模板外部的组合框上设置附加属性可以正常工作;
这是我试图在模板中设置属性的方法:
<HierarchicalDataTemplate x:Key="template1"
ItemsSource="{Binding Path=ChildColumns}">
<Border
Background="{StaticResource TreeItem_Background}"
BorderBrush="Blue"
BorderThickness="2"
CornerRadius="5"
Margin="2,5,5,2"
HorizontalAlignment="Left" >
<Grid>
<Grid.ColumnDefinitions >
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock MinWidth="80" HorizontalAlignment="Left" Grid.Column="0" Margin="5,2,2,2" Grid.Row ="0"
Text="{Binding Path=ColName}"/>
<ComboBox Name="cboColType" Grid.Column="1"
HorizontalAlignment="Right"
ItemsSource="{Binding Source={StaticResource dataFromEnum}}"
SelectedItem="{Binding Path=ColumnType}"
Margin="2,2,2,2"
local:ItemSelectedBehavior.ItemSelected="{Binding Path=LoadConfigCommand}"
/>
</Grid>
</Border>
</HierarchicalDataTemplate>
我也试过创建一个样式
<Style x:Key="childItemStyle" TargetType="{x:Type FrameworkElement}">
<Setter Property="local:ItemSelectedBehavior.ItemSelected" Value="{Binding Path=LoadConfigCommand}" />
</Style>
并将itemcontainerstyle设置为分层datatemplate中的样式..但是没有运气..
<HierarchicalDataTemplate>
...
<ComboBox Name="cboColType" Grid.Column="1"
HorizontalAlignment="Right"
ItemsSource="{Binding Source={StaticResource dataFromEnum}}"
SelectedItem="{Binding Path=ColumnType}"
Margin="2,2,2,2"
ItemContainerStyle={StaticeResource childItemStyle}"
/>
...
</HierarchicalDataTemplate>
我还在学习很多关于WPF的内容,所以我假设有一些关于hierchical datatemplate的特殊内容,不允许设置attache dproperty ..我在论坛中发现了类似的帖子,并试图实现他们的上面的解决方案,但经过一天的搜索和实验,没有运气,我希望有人对此有所了解......
答案 0 :(得分:4)
在这里找到我自己的问题的答案:
Command Binding in hierarchical datatemplate
并更改HierarchicalDataTemplate
中的代码以搜索树,并在窗口 DataContext
中找到自定义附加属性。我告诉它在本地DataContext
上设置附加属性,该属性仅存在于 Window DataContext
中。
将我的代码更改为:
<HierarchicalDataTemplate>
...
<ComboBox Name="cboColType" Grid.Column="1"
HorizontalAlignment="Right"
ItemsSource="{Binding Source={StaticResource dataFromEnum}}"
SelectedItem="{Binding Path=ColumnType}"
Margin="2"
local:ItemSelectedBehavior.ItemSelected="{Binding
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=DataContext.LoadConfigCommand}" />
...
</HierarchicalDataTemplate>
它有效。耶!