C# 在datagridcolumn单元格中显示ICollection
所以我有一个名为“Tags”的列,它由一个人的属性组成。例如,一个叫BoB的人,标签上写着“屁股”[滑稽、可爱、外向]。我能够过滤Datagrid搜索标记。我只能显示第一个。我的问题是,我希望一次能够显示多个标记 Person.csC# 在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 :
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 :)
}
}