2

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

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

问题是 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>
4

1 回答 1

2

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

将绑定更改为:

Content="{Binding}"

您还需要查看您的 ContentTemplateSelector 类

于 2015-03-06T15:50:19.457 回答