2013-07-10 165 views
2

請幫我弄清楚如何在WPF的DataGrid中使用ComboBoxColumn。 我正在嘗試創建一個設備列表,其中每個設備都有「日誌」字段中的動態狀態列表。將ComboBoxColumn綁定到WPF DataGrid中DataGrid的ItemsSource的集合

<DataGrid AutoGenerateColumns="False" Margin="12,6,12,12" Name="dataGrid1" Grid.Row="1" SelectionUnit="FullRow"> 
    <DataGrid.Columns> 
      ... 
     <DataGridComboBoxColumn Header="Log" 
           ItemsSource="{Binding log, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Device}}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Device> devices; 
    ... 
} 

public MainWindow() 
{ 
    ... 
    dataGrid1.ItemSource = devices; 
} 

public class Device : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    public Device() {log = new ObservableCollection<string>();} 
    ... 
    private ObservableCollection<string> _log; 
    public ObservableCollection<string> log { get { return _log; } 
               set { _log = value; OnPropertyChanged("log"); } } 
} 

你可以共享任何建議:我怎樣才能顯示在數據網格列表中的每個對象的「日誌」每個組合框?

+0

首先檢查您的datagridcolumn是否通過在日誌(集合)的get方法上應用斷點來檢索日誌。如果它正在那個斷點上,那麼檢查你的日誌(集合)是否爲空,請檢查它。 – loop

+0

日誌(集合)在運行時定義爲非空。但DataGridComboBoxColumn不檢索日誌。 –

+0

所以thr是你的綁定問題在相對的源代碼部分..你不能給你的日誌存在的正確路徑。所以只是把你的整個windows.cs代碼在這裏我會檢查出來,並希望使它對你正確 – loop

回答

4

MSDN: DataGridComboboxColumns說:

要填充的下拉列表中,首先爲 組合框ItemsSource屬性通過使用下列選項之一:

  • 靜態資源。有關更多信息,請參閱StaticResource標記擴展。
  • x:靜態代碼實體。有關更多信息,請參見x:靜態標記擴展。
  • ComboBoxItem類型的內聯集合。

所以基本上只綁定到數據object`s集合屬性它`最好使用DataGridTemplateColumn

<DataGridTemplateColumn Header="Log"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding log}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

這種類型的列給你一些更posibilities的模板了。

+0

非常感謝!有用。它對我非常有幫助。 –

+0

歡迎您=) – icebat