我的列表框有一个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类型的文本框。我怎样才能实现这一目标。
为了澄清一些要点,使用反射在运行时填充列表,因此我不知道哪些字段是提前的类型。
答案 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为每种类型返回不同的模板。