所以我有一个专栏和#34;标签"它由一个人的属性组成。例如,一个名为BoB的人,并且有这样的标签[Funny,Nice,Outgoing]。我能够过滤Datagrid搜索标签。我只能显示第一个。我的问题是我希望一次能够显示多个标签。
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; }
....}
视图模型:
using (var ctx = DB.Get())
{
Items.AddRange(ctx.People.Select(x => new PersonDTO
{....
Tags = x.Tags.FirstOrDefault().Tag
....}
}
Datatemplate Trial:
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Tags.Tag}"></TextBlock>
</StackPanel>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
答案 0 :(得分:2)
您可以使用DataGridTemplateColumn并创建用于显示列表的模板,或者实现IValueConverter以编程方式将列表转换为单个字符串(例如,使用String.Join)。
更新:要显示集合,您需要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以获取使用此课程所需的其他信息。