我在ContentControl的资源中定义了几个DataTemplates:
<DataTemplate DataType="{x:Type sys:String}">
<Label Content="{Binding}" HorizontalContentAlignment="Center" />
</DataTemplate>
<DataTemplate DataType="{x:Type dmodels:CBClient}"> <!-- Client Details Template -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Client Details" Background="{StaticResource brush_Client}" Foreground="White" Margin="0,0,1,0" VerticalAlignment="Center" />
<TextBlock Grid.Column="1" Text="Id:" Background="{StaticResource brush_Client}" Foreground="White" />
<TextBlock Grid.Column="2" Text="{Binding Path=ClientId}" Background="{StaticResource brush_Client}" Foreground="White" Margin="0,0,1,0" />
<Button Grid.Column="3" Style="{StaticResource EditButton}" />
</Grid>
</DataTemplate>
如果我返回一个CBClient对象,我会从定义的DataTemplate中获得正确的显示。
如果我返回一个字符串,我会得到一个StackOverflowException。
如果我删除了String DataTemplate并返回一个字符串,我会显示字符串,但格式不是我想要的。
我做错了什么?我是否必须将基本字符串返回包装到完整的类中,并公开消息属性?是否无法将复杂对象与DataTemplates的整数类型组合在一起?
感谢。
Ĵ
答案 0 :(得分:0)
您使用Label引入了并发症。如果绑定到字符串,它会自动生成文本块。如果依靠它自动添加文本块,以这种方式绑定会产生奇怪的效果。我应该认为这是因为它看到的是一个对象,而不是来自您绑定的属性类型的字符串。 你可以这么做:
<DataTemplate DataType="{x:Type sys:String}">
<Label HorizontalContentAlignment="Center">
<TextBlock Text="{Binding}" />
</Label>
</DataTemplate>