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について多くのことを学んでいるので、添付ファイルのプロパティを設定できない階層データテンプレートに何か特別なことがあると思います。フォーラムで同様の投稿を見つけ、上記のようにソリューションを実装しようとしました。 、しかし、運が悪かったので検索と実験を1日行った後、誰かがこれについてアイデアを持っていることを願っています...

4

1 に答える 1

4

ここで私自身の質問への答えを見つけました:

階層データ テンプレートでのコマンド バインディング

HierarchicalDataTemplateそして、ツリーを検索してWindow でカスタム添付プロパティを見つけるように のコードを変更しましたDataContext。添付プロパティをローカルに設定するように指示していましたが、プロパティはWindowDataContextにのみ存在します。 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 に答える