如何创建简单的 DataGridComboboxColumn?
Posted
技术标签:
【中文标题】如何创建简单的 DataGridComboboxColumn?【英文标题】:How to create simple DataGridComboboxColumn? 【发布时间】:2016-03-17 10:36:12 【问题描述】:如何创建简单的DataGridComboboxColumn?
我尝试创建一个包含两个字段的行:字符串和带有一些参数的组合框。 我可以硬编码。
但是,它不起作用。当我单击“添加行”按钮时:已创建行,但我只能编辑文本框而没有组合框显示。
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="5*"></RowDefinition>
<RowDefinition Height="95*"></RowDefinition>
</Grid.RowDefinitions>
<ToolBar Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="27" >
<Button x:Name="btAddAttr" Click="btAddAttr_Click" Height="22" Width="22"
ToolTip="Add Row"
>
<Button.Content>
<Image Source="/UI.Resources;component/PNGImages/ItemAdd.png"></Image>
</Button.Content>
</Button>
<Button x:Name="btDelAttr" Click="btDelAttr_Click" Height="22" Width="22" ToolTipService.ShowOnDisabled="True"
ToolTip="Remove Row"
>
<Button.Content>
<Image Source="/UI.Resources;component/PNGImages/ItemDel.png">
</Image>
</Button.Content>
</Button>
</ToolBar>
<Grid Grid.Row="1" x:Name="grAttrs" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"></ColumnDefinition>
<ColumnDefinition Width="25*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<DataGrid AutoGenerateColumns="False" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Name="dgAttfs"
IsEnabled="True"
IsReadOnly="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
Loaded="dgAttfs_Loaded"
ItemsSource="Binding ObjectsViewModel.AttributeRowColl,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged"
>
<DataGrid.Columns>
<DataGridTextColumn Binding="Binding Name" MinWidth="120" Width="Auto"
Header="Name" />
<DataGridComboBoxColumn x:Name="typeAttributeColumn" MinWidth="220"
IsReadOnly="True"
SelectedItemBinding="Binding Path=TypeAttribute"
Header="List of types"
>
<DataGridComboBoxColumn.ItemsSource>
<col:ArrayList>
<sys:String>Type1</sys:String>
<sys:String>Type2</sys:String>
<sys:String>Type3</sys:String>
<sys:String>Type4</sys:String>
<sys:String>Type5</sys:String>
<sys:String>Type6</sys:String>
<sys:String>Type7</sys:String>
<sys:String>Type8</sys:String>
</col:ArrayList>
</DataGridComboBoxColumn.ItemsSource>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
有一部分 XAML 代码。因此,我尝试使用 XAML 样式绑定类型集合,正如您在代码中看到的那样。
而且,我尝试在加载DataGrid
时绑定它。
private void dgAttfs_Loaded(object sender, RoutedEventArgs e)
List<String> ss = new List<string>();
ss.Add("Test");
typeAttributeColumn.ItemsSource = ss;
没有结果。
并且,当按钮点击时:
private void btAddAttr_Click(object sender, RoutedEventArgs e)
var obj = new Row(_sm);
_viewModel.ObjectsViewModel.AttributeRowColl.Add(obj);
typeAttributeColumn.ItemsSource = _viewModel.ObjectsViewModel.AttributeRowColl;
DataContext = _viewModel;
类行:
internal class Row:INotifyPropertyChanged
private IServiceManager _serviceManager;
private string _name;
/// <summary>
/// Имя Значения
/// </summary>
public string Name
get
return _name;
set
_name = value;
OnPropertyChanged("Name");
private ObservableCollection<String> _typesColl;
public ObservableCollection<String> TypesColl
get
if (_typeAttribute == null)
_typeAttribute = "Bit";
return _typesColl;
set
_typesColl = value;
OnPropertyChanged("TypesColl");
private String _typeAttribute;
public String TypeAttribute
get
return _typeAttribute;
set
_typeAttribute = value;
OnPropertyChanged("TypeAttribute");
public Row(IServiceManager serviceManager)
_serviceManager = serviceManager;
TypesColl = new ObservableCollection<string>();
TypesColl = GetColl(serviceManager);
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propName)
PropertyChangedEventHandler eh = this.PropertyChanged;
if (null != eh)
eh(this, new PropertyChangedEventArgs(propName));
#endregion
您能帮我吗,如何在 DataGridComboBoxColumn 中显示类型列表?
【问题讨论】:
可能是因为 ReadOnly 属性设置为 true? 不,它不起作用。 @AdmiralLand :从 DataGridComboBoxColumn XAML 中删除 IsReadOnly="True" 并双击组合框列。您将获得组合框。我正在使用您的代码获得组合框。 @NareshRavlani,将其发布为答案,我将提交。 【参考方案1】:从 DataGridComboBoxColumn XAML 中删除 IsReadOnly="True" 并双击组合框列。你会得到组合框。我正在使用您的代码获取组合框。
这是因为数据网格有文本块作为单元格模板,当您尝试使用双击编辑它时,它会将单元格模板更改为编辑单元格模板,并且数据网格编辑模板使用组合框作为它的内部控件。
【讨论】:
我并不贪心,但如果这是您正在寻找的内容,那么您也应该将其标记为答案。这样寻找解决方案的人就可以轻松找到它:)以上是关于如何创建简单的 DataGridComboboxColumn?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript/JQuery 创建一个简单的地图 [重复]