2013-07-10 163 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