2011-02-04 80 views
0

我需要将第一行的第一个单元格更改为空白文本框。 现在我有作为datagridviewcombobox列的列? 如何将Datagridcombobox单元格更改为文本框?

    <DataGridComboBoxColumn Header="And/Or" Width="60" ItemsSource="{Binding Source={StaticResource PredicateCombinationOperatorsEnumValues}}" SelectedItemBinding="{Binding PredicateCombinationOperator, Mode=TwoWay}" /> 
        <DataGridComboBoxColumn Header="Field" ItemsSource="{Binding Source={StaticResource FieldTypeEnumValues}}" SelectedItemBinding="{Binding FieldType}"/> 
        <DataGridComboBoxColumn Header="Operator" MinWidth="70" ItemsSource="{Binding Source={StaticResource OperatorsEnumValues}}" SelectedItemBinding="{Binding Operator}"/> 
        <DataGridTextColumn Header="Value" MinWidth="100" Width="*" Binding="{Binding Expression}"/> 
       </DataGrid.Columns> 
       <DataGrid.InputBindings> 
        <KeyBinding Command="{Binding Source={StaticResource DeleteContextMenuCommand}}" Key="Delete"/> 
       </DataGrid.InputBindings> 
       <DataGrid.ContextMenu> 
        <ContextMenu ItemsSource="{Binding MenuOptions}"> 
         <ContextMenu.ItemContainerStyle> 
          <Style TargetType="{x:Type MenuItem}"> 
           <Setter Property="Header" Value="{Binding Name}" /> 
           <Setter Property="Command" Value="{Binding}" /> 
           <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}" /> 
           <Setter Property="AutomationProperties.AutomationId" Value="{Binding Name}" /> 
           <Setter Property="AutomationProperties.Name" Value="{Binding Name}" /> 
          </Style> 
         </ContextMenu.ItemContainerStyle> 
        </ContextMenu> 
       </DataGrid.ContextMenu> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="ContextMenuOpening"> 
         <trigger:ContextMenuOpeningTriggerAction/> 
        </i:EventTrigger> 
        <i:EventTrigger EventName="SelectionChanged"> 
         <trigger:SelectionChangeTriggerAction/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
      </DataGrid> 
+0

嗨的DataTemplate中,你可以与我们分享您用来设置网格的XAML? – 2011-02-04 22:02:44

回答

1

您可以指定条件的数据模板,并根据您的病情选择模板。首先,我们必须从DataTemplateSelector继承类并定义DataTemplate类型的属性。定义尽可能多的属性数据模板您want.Then覆盖SelectTemplate方法来回报你want.Check下面的示例代码

<Window.Resources> 
    <local:Animals x:Key="animals"/> 
    <DataTemplate x:Key="TextTemplate"> 
     <TextBox Margin="2" Width="60" /> 
    </DataTemplate> 
    <DataTemplate x:Key="ComboTemplate" > 
     <ComboBox Width="60" /> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <Controls:DataGrid> 
     <Controls:DataGrid.Columns> 
      <Controls:DataGridTemplateColumn Header="And/Or" Width="60"> 
       <Controls:DataGridTemplateColumn.CellTemplateSelector> 
        <local:CustomTemplateSelector 
     TextTemplate="{StaticResource TextTemplate}" 
     ComboTemplate="{StaticResource ComboTemplate}"/> 
       </Controls:DataGridTemplateColumn.CellTemplateSelector> 
      </Controls:DataGridTemplateColumn> 

      <Controls:DataGridComboBoxColumn Header="Field"/> 
      <Controls:DataGridComboBoxColumn Header="Operator" MinWidth="70" /> 
      <Controls:DataGridTextColumn Header="Value" MinWidth="100" Width="*"/> 
     </Controls:DataGrid.Columns> 

    </Controls:DataGrid> 

</Grid> 



    public class CustomTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate TextTemplate 
    { get; set; } 

    public DataTemplate ComboTemplate 
    { get; set; } 

    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
    MyObject obj = item as MyObject; 

    if (obj != null) 
    { 
      // custom logic to select appropriate data template and return 
    } 
    else 
     return base.SelectTemplate(item, container); 
    } 


    } 
} 

在这里更多的检查

http://zamjad.wordpress.com/2010/08/23/apply-conditional-data-template-in-data-grid/

相关问题