WPF:使用 DataTemplateSelector/ContentTemplateSelector 后文本框绑定不起作用

WPF : TextBox binding not working after using DataTemplateSelector/ContentTemplateSelector

我正在做一个树视图UI。我使用 DataTemplateSelector 来决定是否根据数据参数集合动态显示一系列文本框或组合框。

请在我的代码中注明。 ArugumentDetailsCollection 是一个包含 ArgumentDetails class 的可观察集合。 DefaultValue 是 ArgumentDetails class 中的字符串 属性。请注意 属性 不是依赖项 属性

问题是 DefaultValue 没有绑定到 TextBox。显示 TextBox 时,它包含空字符串。

请注意,如果不使用数据模板选择器,文本框可以正常工作。 请问有人可以建议吗?谢谢

                    <ItemsControl x:Name="argumentTexts" ItemsSource="{Binding ArgumentDetailsCollection}">
                        <ItemsControl.Resources>
                            <DataTemplate x:Key="TextBoxDataTemplate">
                                <TextBox Text="{Binding Path=DefaultValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                         VerticalAlignment="Center" 
                                         Width="Auto" 
                                         Margin="5,0,0,0"
                                         Padding="0" 
                                         Style="{StaticResource GridEditStyle}"
                                         IsEnabled="True"/>
                            </DataTemplate>
                            <DataTemplate x:Key="ComboBoxDataTemplate">
                                <ComboBox HorizontalAlignment="Stretch" 
                                         VerticalAlignment="Center" 
                                         Width="Auto" 
                                         Margin="5,0,0,0"
                                         Padding="0" 
                                         Style="{StaticResource GridEditStyle}"
                                         IsEnabled="True"/>
                            </DataTemplate>
                            <columnConfiguratorControls:ArgumentTypeTemplateSelector x:Key="ArgTemplateSelector" ComboBoxDataTemplate="{StaticResource ComboBoxDataTemplate}" TextBoxDataTemplate="{StaticResource TextBoxDataTemplate}"/>
                        </ItemsControl.Resources>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel HorizontalAlignment="Stretch" IsItemsHost="True" Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                             <DataTemplate DataType="{x:Type structures:ArgumentDetails}">
                                    <ContentControl Content="{Binding VisibleName}"
                                                  ContentTemplateSelector="{StaticResource ArgTemplateSelector}" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

在您的 ContentControl 中写入 Content="{Binding VisibleName}" 将使所选 DataTemplate 的数据上下文成为 VisibleName 属性。这就是您无法访问 DefaultValue 属性 的原因,因为它是 ArgumentDetails 的成员。

将绑定更改为:

Content="{Binding}"

您还需要检查您的 ContentTemplateSelector class