2016-09-30 86 views
1

我如何可以綁定一個Datagrid有兩列(DataGridTextColumnDataGridComboBoxColumn)到ObservableCollection<Team> Teams綁定一個DataGrid到一個ObservableCollection <T>在WPF

DataGridTextColumn被正確綁定。但DataGridComboBoxColumn中沒有顯示任何內容。

代碼隱藏

public class Team 
    { 
     public string Name { get; set; } 
     public List<string> Members { get; set; } 
    } 

    public class ViewModel : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private ObservableCollection<Team> teams = new ObservableCollection<Team> 
     { 
     new Team() 
     { 
      Name = "A", Members = new List<string> {"John", "Jack"}, 
     }, 
     new Team() 
     { 
      Name = "B", Members = new List<string> {"Sarah", "Anna"}, 
     } 
     }; 
     public ObservableCollection<Team> Teams 
     { 
     get { return teams; } 
     set 
     { 
      teams = value; 
      RaisePropertyChanged("Teams"); 
     } 
     } 

     private void RaisePropertyChanged(string propertyName) 
     { 
     var handler = PropertyChanged; 
     if (handler == null) return; 

     handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

XAML

<DataGrid ItemsSource="{Binding Path=Teams}" 
      AutoGenerateColumns="False"> 
    <DataGrid.Columns> 

     <DataGridTextColumn Header="Team" 
            IsReadOnly="True" 
            Width="*" 
            Binding="{Binding Name}"/> 

     <DataGridComboBoxColumn Header="Members" 
             Width="*" 
             /> 

    </DataGrid.Columns> 
</DataGrid> 
+0

您是否擁有視圖集的DataContext?否則它看起來很好。 –

+0

@StephenWilson是的,我確定了。 – Vahid

回答

2

只要使用「DataGridTemplateColumn」。 不要忘記添加一個selectedItem成員。

  <DataGridTemplateColumn Header="Members"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate DataType="wpfApplication1:Team"> 
         <ComboBox ItemsSource="{Binding Members}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
+0

感謝羅姆,你能告訴我如何添加selectedItem綁定。我只想顯示第一個索引。 – Vahid

+0

1.添加選定的屬性:public class Team { public string Name {get;組; } public string SelectedMember {get;組; } public list Members {get;組; } Name =「A」,Members = new List {「John」,「Jack」},SelectedMember =「John」3. Rom

+1

非常感謝。 – Vahid

3

你需要設置與視圖模型的實例你的控制DataContext財產。就像,在控制構造

this.DataContext = new ViewModel(); 

,並填寫的DisplayMemberPath在您的XAML

<DataGridTextColumn Header="Team" DisplayMemberPath="Name" ... 

UPDATE

我inccorrect。由於DataGridComboboxColumn不繼承DataContext的,做你想做什麼,你在下面的方法做:

<DataGrid ItemsSource="{Binding Path=Teams}" 
     AutoGenerateColumns="False"> 
     <DataGrid.Columns> 

      <DataGridTextColumn Header="Team" 
           IsReadOnly="True" 
           Width="*" 
           Binding="{Binding Name}" /> 

      <DataGridComboBoxColumn Header="Members" 
            Width="*" 
            > 

       <DataGridComboBoxColumn.ElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Path=Members}" /> 
        </Style> 
       </DataGridComboBoxColumn.ElementStyle> 

       <DataGridComboBoxColumn.EditingElementStyle> 
        <Style TargetType="ComboBox"> 
         <Setter Property="ItemsSource" Value="{Binding Path=Members}" /> 
        </Style> 
       </DataGridComboBoxColumn.EditingElementStyle> 
      </DataGridComboBoxColumn> 

     </DataGrid.Columns> 
    </DataGrid> 
+0

我已經設置了這個。 – Vahid

+0

你可以幫我使用DisplayMemberPath嗎? – Vahid

+0

已經完成編輯:) – tym32167

相關問題