为什么一个String DataTemplate会导致栈溢出异常?

Why does a String DataTemplate cause a stack overflow exception?

我在 ContentControl 的资源中定义了几个数据模板:

<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>

我做错了什么?我是否必须将基本字符串 return 包装成完整的 class,并公开一条消息 属性?有没有办法将复杂对象与 DataTemplates 的整数类型结合起来?

谢谢。

J

您使用标签引入了复杂功能。如果您绑定到一个字符串,它会自动生成一个文本块。如果您依靠它自动添加文本块,以这种方式绑定会产生奇怪的效果。我应该认为这是因为它看到的是一个对象,而不是来自您要绑定的 属性 类型的字符串。 你可以这样做:

<DataTemplate DataType="{x:Type sys:String}">
    <Label HorizontalContentAlignment="Center">
        <TextBlock Text="{Binding}" />
    </Label>
</DataTemplate>