DataTemplate中的Textbox或Datepicker。基于我想要的数据类型,但不是两者

时间:2011-06-01 18:28:24

标签: wpf vb.net

我的列表框有一个datatemplate:

<DataTemplate x:Key="CheckBoxTextBoxItemTemplate">
    <StackPanel Orientation="Horizontal">
        <CheckBox Focusable="False" IsChecked="{Binding IsChecked}" VerticalAlignment="Center"/>
        <ContentPresenter Content="{Binding Name, Mode=OneTime}" Margin="2,0" Width="140" VerticalAlignment="Center"/>
        <TextBox Text="{Binding FieldData}" Margin="2,0" Width="200" Visibility="{Binding FieldDataVisible}"/>
    </StackPanel>
</DataTemplate>

但是,列表框中绑定的列表中的项目并非都是String类型。一些是DateTime,一些是整数。我希望显示datetimepicker而不是DateTime类型的文本框。我怎样才能实现这一目标。

为了澄清一些要点,使用反射在运行时填充列表,因此我不知道哪些字段是提前的类型。

1 个答案:

答案 0 :(得分:2)

在ListBox的Resources块中,您可以为每种类型指定一个DataTemplate(伪代码):

<ListBox.Resources>
  <DataTemplate DataType="{x:Type String}">
    <TextBlock />
  </DataTemplate>
  <DataTemplate DataType="{x:Type DateTime}">
    <DateTimePicker />
  </DataTemplate>
</ListBox.Resources>

请注意,您没有通过标识符引用这些模板;它们将简单地应用于其范围内的任何指定DataType实例(ListBox)。

或者,您可以实现DataTemplateSelector为每种类型返回不同的模板。