У меня есть объекты списка (PropertyBase
- это базовый тип с Key
и Value
), которые я хочу показать пользователям в каком-то формате формы. На основе типа объекта я хочу переключаться между различными элементами управления. Скажем, int
, double
значения представлены с Label
s, где значения string
будут доступны для редактирования через TextBox
. Аналогично, я хочу отобразить ComboBox
для значений enum
.WPF - Templatize Список объектов, основанных на их типе
До сих пор я читал около DataTemplate
s, ContentPresenter
и придумывал следующую часть кода xaml. Однако нижеприведенный шаблон отображает тип объекта (PropertyBase[Int64]
, PropertyBase[String]
), а не его значение. Что в этом плохого?
<ItemsControl ItemsSource="{Binding Path=Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="models:PropertyBase">
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding Key}" />
<ContentPresenter Grid.Column="1" Content="{Binding}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type system:Int64}">
<Label Content="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type system:String}">
<TextBox Text="{Binding Value, Mode=TwoWay}" />
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>