Не удается использовать вложенное свойство в выпадающем списке внутри иерархической таблицы данных WPF - PullRequest
2 голосов
/ 24 мая 2010

Я надеюсь использовать прикрепленное свойство, чтобы назначить команду для события изменения выбора в выпадающем списке, который встроен в древовидное представление.Я пытаюсь установить вложенное свойство в шаблоне иерархических данных для дерева, но команда не установлена ​​и не запускается при изменении элемента в выпадающем списке.

Я обнаружил, что установка присоединенного свойства непосредственно в поле со списком вне таблицы данных работает нормально;

вот как я пытаюсь установить свойство в шаблоне:

<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, чтобы быть установленным .. Я нашел подобные сообщения в форумах и попытался реализовать их решения как выше, но после дня поиска и экспериментирования без удачи, я надеюсь, у кого-то есть идея об этом ...

1 Ответ

4 голосов
/ 24 мая 2010

Нашел ответ на свой вопрос здесь:

Привязка команд в иерархической таблице данных

И изменил код в 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>

И это работает.Ура!

...