在数据列单元格中显示集合
本文关键字:显示 集合 单元格 数据 | 更新日期: 2023-09-27 17:49:57
所以我有一个叫做"Tags"的列,它由一个人的属性组成。例如,一个叫BoB的人有这样的标签[有趣,好,外向]。我能够过滤数据网格搜索标签。我只能显示第一个。我的问题是,我希望能够一次显示多个标签。
TagDataGrid TagAttributes
Person.cs
public class Person
{...
public virtual ICollection<Tags> Tags { get; set; }
...}
Tags.cs
public class Tags
{....
public string Tag { get; set; }
....}
PersonDTO.cs
public class PersonDTO : IDTO
{....
public string Tag { get; set; }
....}
ViewModel:
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>
您可以使用DataGridTemplateColumn并创建用于显示列表的模板,或者实现IValueConverter以编程方式将列表转换为单个字符串(使用string。(例如Join)。
Update:为了显示一个集合,您需要一个ItemsControl
—例如,ListBox
。像这样:
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
使用IValueConverter
:
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 :)
}
}
值转换器将原始值(集合)转换为新值(字符串)。这样就可以使用常规文本列。查看MSDN以获取使用该类所需的其他信息