2

我希望使用附加属性将命令分配给嵌入在树视图中的组合框的选择更改事件。我正在尝试在树的分层数据模板中设置附加属性,但该命令未设置,并且在组合框中的项目更改时不会触发。

我发现直接在数据模板之外的组合框上设置附加属性可以正常工作;

这是我尝试在模板中设置属性的方式:

<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 设置为分层数据模板中的样式..仍然没有运气..

<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 的知识,所以我假设分层数据模板有一些特殊之处,不允许设置附件 dproperty。我在论坛中找到了类似的帖子,并尝试按照上面的方法实现他们的解决方案,但经过一天的搜索和试验但没有运气,我希望有人对此有所了解......

4

1 回答 1

4

在这里找到了我自己的问题的答案:

分层数据模板中的命令绑定

并更改中的代码以搜索树并在WindowHierarchicalDataTemplate中找到自定义附加属性。我告诉它在本地设置附加属性,并且该属性仅存在于Window中。 DataContextDataContext 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>

它有效。耶!

于 2010-05-24T09:05:34.243 回答