Как изменить ячейку Datagridcombobox в текстовое поле? - PullRequest
0 голосов
/ 05 февраля 2011

Мне нужно изменить 1-ю ячейку 1-го ряда на пустое текстовое поле. прямо сейчас у меня есть столбец datagridviewcombobox column?

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

1 Ответ

1 голос
/ 05 февраля 2011

Вы можете указать шаблон условных данных и выбрать шаблон в соответствии с вашими условиями.Сначала мы должны унаследовать класс от DataTemplateSelector и определить свойства типа DataTemplate.Определите столько свойств, сколько вы хотите для шаблона данных. Затем переопределите метод SelectTemplate, чтобы получить желаемую табличку с данными. Проверьте приведенный ниже пример кода

  <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);
  }


  }
}

, чтобы узнать больше.1007 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...