C# 在datagridcolumn单元格中显示ICollection

C# 在datagridcolumn单元格中显示ICollection,c#,wpf,C#,Wpf,所以我有一个名为“Tags”的列,它由一个人的属性组成。例如,一个叫BoB的人,标签上写着“屁股”[滑稽、可爱、外向]。我能够过滤Datagrid搜索标记。我只能显示第一个。我的问题是,我希望一次能够显示多个标记 Person.cs public class Person {... public virtual ICollection<Tags> Tags { get; set; } ...} PersonDTO.cs public class PersonDTO :

所以我有一个名为“Tags”的列,它由一个人的属性组成。例如,一个叫BoB的人,标签上写着“屁股”[滑稽、可爱、外向]。我能够过滤Datagrid搜索标记。我只能显示第一个。我的问题是,我希望一次能够显示多个标记

Person.cs

public class Person
{...
    public virtual ICollection<Tags> Tags { get; set; } 
...}
PersonDTO.cs

public class PersonDTO : IDTO
{....
    public string Tag { get; set; } 
....}
视图模型:

using (var ctx = DB.Get()) 
{
    Items.AddRange(ctx.People.Select(x => new PersonDTO
    {.... 
        Tags = x.Tags.FirstOrDefault().Tag
    ....}
}
Datatemplate试用版:

<telerik:GridViewDataColumn.CellTemplate>
  <DataTemplate>
       <StackPanel Orientation="Vertical">
            <TextBlock Text="{Binding Tags.Tag}"></TextBlock>
       </StackPanel>
  </DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>

您可以使用并创建用于显示列表的模板,或者实现以编程方式将列表转换为单个字符串(例如,使用)

更新:为了显示集合,您需要一个
ItemsControl
——例如,
ListBox
。大概是这样的:

<telerik:GridViewDataColumn.CellTemplate>
  <DataTemplate>
    <ListBox ItemsSource="{Binding}"/>
  </DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>

值转换器将原始值(集合)转换为新值(字符串)。这样就可以使用常规文本列。查看使用该类所需的其他信息。

您好,我正在尝试使用DataGridTemplateColumn,没有任何东西可以完成。更新我的代码:支持。你想达到什么目标?你想把它显示在一个奇特的列表中还是作为一个简单的字符串(比如“搞笑,不错”)?然后使用一个类似于我答案中的值转换器。嘿@opd我几乎让它工作了,我制作并实现了所有现在唯一的问题是返回行。这是我在Nevermind中得到的错误,我没有使用string.join方法,而是在col中使用foreach值并连接这些值!谢谢你给我看这个转换器!
<telerik:GridViewDataColumn.CellTemplate>
  <DataTemplate>
    <ListBox ItemsSource="{Binding}"/>
  </DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
public class JoinArrayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var col = value as ICollection<Tags>;
        if(col==null)
          throw new InvalidArgumentException("Expected a ICollection<Tags>");
        return string.Join(", ",col.ToArray());
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException(); // No one ever implement this one :)
    }
}