现在我在每一行中都有一列带有组合框的
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<ComboBox
ItemsSource="{Binding Path=PropertyDetails.ValidValues}"
SelectedItem="{Binding Path=CurrentValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="FullText">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我需要例如:
第一行-ComboBox
第二行-TextBox
第三行-TextBox
第四行-ComboBox
答案 0 :(得分:1)
您可以使用CellTemplateSelector
....
创建一个继承自DataTemplateSelector
的类:
public class YourTemplateSelector : DataTemplateSelector
{
public DataTemplate ComboTemplate
{ get; set; }
public DataTemplate TextTemplate
{ get; set; }
public DataTemplate CheckTemplate
{ get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MyObject obj = item as MyObject;
if (obj != null)
{
// Select your template
}
else
return base.SelectTemplate(item, container);
}
}
在视图内定义模板:
<UserControl.Resources>
<DataTemplate x:Key="ComboTemplate">
<ComboBox ItemSource="{Binding}" />
</DataTemplate>
<DataTemplate x:Key="TextTemplate">
<TextBlock Text="{Binding}" />
</DataTemplate>
<DataTemplate x:Key="CheckTemplate">
<CheckBox IsChecked="{Binding}" />
</DataTemplate>
</UserControl.Resources>
然后使用它:
<DataGridTemplateColumn Header="Your Custom Col">
<DataGridTemplateColumn.CellTemplateSelector>
<local:YourTemplateSelector
ComboTemplate="{StaticResource ComboTemplate}"
TextTemplate="{StaticResource TextTemplate}"
CheckTemplate="{StaticResource CheckTemplate}"/>
</DataGridTemplateColumn.CellTemplateSelector>
</DataGridTemplateColumn>
答案 1 :(得分:1)
您可以直接指定列,如下面的代码所示。
<DataGrid x:Name="dataGridName">
<DataGrid.Columns>
<DataGridTextColumn x:Name="textBoxName" Header="TextBox Header">
</DataGridTextColumn>
<DataGridComboBoxColumn x:Name="comboBoxName" Header="Header Name">
</DataGridComboBoxColumn>
<DataGridTemplateColumn x:Name="templateName" Header="Template Header">
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
除了文本框和组合框,您还可以创建模板,超链接等。