2014-03-12 61 views
0

所以我有一個名爲「標籤」的列,它由一個人的屬性組成。比如一個叫BoB的人,並且有這樣的標籤[Funny,Nice,Outgoing]。我能夠過濾Datagrid搜索標籤。我只能顯示第一個。我的問題是,我希望能夠一次顯示多個標籤。在DataGrid列單元格中顯示ICollection

TagDataGridTagAttributes

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試用:

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

WPF或WinForms? – Benesh

回答

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獲取您需要的其他信息以便使用此課程。

+0

嗨,我想要做DataGridTemplateColumn,什麼都沒有通過。更新我的代碼:s – Master

+0

已更新。你想達到什麼目的?你想顯示它在一個奇特的列表或一個簡單的字符串(如「搞笑,尼斯」)? – Benesh

+0

是的,正確地顯示一個簡單的字符串 – Master