请帮助我弄清楚如何在 WPF 的 DataGrid 中使用 ComboBoxColumn。
我正在尝试创建一个设备列表,其中每个设备在“日志”字段中都有动态状态列表。
<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"); } }
}
您能否分享任何建议:如何在每个对象的数据网格列表“日志”的每个组合框中显示?
MSDN:DataGridComboboxColumns http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcomboboxcolumn.aspx says:
要填充下拉列表,首先设置 ItemsSource 属性
使用以下选项之一的组合框:
- 静态资源。有关详细信息,请参阅静态资源标记扩展。
- x:静态代码实体。有关详细信息,请参阅 x:静态标记扩展。
- ComboBoxItem 类型的内联集合。
所以基本上只是绑定到数据对象的集合属性,最好使用DataGridTemplateColumn
:
<DataGridTemplateColumn Header="Log">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding log}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这种类型的列为您提供了更多模板工具的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)