2013-01-09 48 views
1

我有一個GridView像下面。綁定列表<string>到GridViewColumn

<Grid> 
    <ListView Margin="8,44,8,50" TabIndex="57" Name="CustomFieldList"> 
     <ListView.View> 
      <GridView AllowsColumnReorder="False"> 
       <GridViewColumn Header="Semester Name" Width="120" DisplayMemberBinding="{Binding FieldName}"/> 
       <GridViewColumn Header="Subjects" Width="150" DisplayMemberBinding="{Binding TypeValidations}"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

我的班級是;

public class DigreePrograme 
    { 
     public string semester{ get; set; } 
     public List<string> subjects { get; set; } 
    } 

我有一個觀察員集合,我已經綁定了列表。

static ObservableCollection<DigreePrograme> digreeList = new ObservableCollection<DigreePrograme>(); 
public ObservableCollection<DigreePrograme> DigreeList 
{ 
    get { return digreeList } 
    set { digreeList = value; OnPropertyChanged("DigreeList"); } 
} 

FormFoad

CustomFieldList.ItemsSource=DigreeList; 

問題
semester屬性顯示完美。但是Subject沒有列出。它顯示爲收藏。如何解決這個問題?

+0

所以你想在列單元格中顯示一個列表? –

+0

@ sa_ddam213-是的。你是對的。 –

回答

6

你可以在你的GridViewColumnDataTemplate添加ItemsControl來顯示所有的Subject項目

XAML:

<Window x:Class="WpfApplication11.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="275" Width="275" x:Name="UI"> 
    <Grid> 
     <ListView Name="CustomFieldList" ItemsSource="{Binding ElementName=UI, Path=DigreeList}" > 
      <ListView.View> 
       <GridView AllowsColumnReorder="False"> 
        <GridViewColumn Header="Semester Name" Width="120" DisplayMemberBinding="{Binding Semester}"/> 
        <GridViewColumn Header="Subjects" Width="150" > 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <ItemsControl ItemsSource="{Binding Subjects}" Width="150" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</Window> 

代碼:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DigreeList.Add(new DigreePrograme { Semester = "Semester 1", Subjects = new List<string>(new string[] {"Math","Art","Engish" }) }); 
    } 

    private ObservableCollection<DigreePrograme> digreeList = new ObservableCollection<DigreePrograme>(); 
    public ObservableCollection<DigreePrograme> DigreeList 
    { 
     get { return digreeList; } 
     set { digreeList = value;} 
    } 
} 

public class DigreePrograme 
{ 
    public string Semester { get; set; } 
    public List<string> Subjects { get; set; } 
} 

結果:

enter image description here

+0

好的。讓我嘗試。 –

+0

它的工作原理。非常感謝你。我查了幾個小時。但沒有找到答案。另一個小闕。我們可以將條目對齊到頂部嗎?現在它在中心。 –

+0

所以你想要他們鋪平水平不垂直 –

0

我建議你在你的視圖模型上創建一個新的字符串屬性,它只是連接你的集合並返回它。這將是最簡單的方法去做這件事..

public class DigreePrograme 
    { 
     public string semester { get; set; } 
     public List<string> subjects { get; set; } 
     public string SubjectsDisplay 
     { 
      get 
      { 
       string returnVal = string.Empty; 
       foreach (string subject in subjects) 
       { 
        returnVal += subject + ", "; 
       } 
       return returnVal.TrimEnd(',', ' '); 
      } 
     } 
    } 

這樣的事情可能會有所幫助。

明顯改變你的約束力:)

歡呼聲。 ste。

+0

感謝您的回覆。如果我沒有選擇,我會選擇這個。 –

+0

@NewDeveloper沒問題,生病繼續想想..希望有東西會彈出:) – Steoates