WPF。是否可以使用ComboBox和TextBox创建DataGridTemplateColumn.CellTemplate?

时间:2018-08-01 06:45:48

标签: c# wpf xaml

现在我在每一行中都有一列带有组合框的

<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

2 个答案:

答案 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>

除了文本框和组合框,您还可以创建模板,超链接等。