我有一个列表对象(PropertyBase
是具有Key
和Value
属性的基本类型),我希望以某种格式显示给用户。根据对象类型,我想在不同的控件之间切换。假设int
,double
值与Label
s一起显示,其中string
值可通过TextBox
进行编辑。同样,我想为ComboBox
值显示enum
。
到目前为止,我已阅读了DataTemplate
s,ContentPresenter
s并提出了以下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>
答案 0 :(得分:0)
问题是数据绑定。 ContentPresenter
没有正确绑定。 <ContentPresenter Grid.Column="1" Content="{Binding}">
绑定到当前来源(ref)。当前来源是PropertyBase
类,其中包含Key
和Value
。 ContentPresenter
试图通过调用PropertyBase
方法而不是使用ToString
来表示Value
课程。
使用<ContentPresenter Grid.Column="1" Content="{Binding Path=Value}">
解决了这个问题。