XamGrid 中 TemplateColumn 的 EditorTemplate 不起作用

EditorTemplate for TemplateColumn in XamGrid not working

我有一个包含两列的 XamGrid,NameType。根据 Type,我想为 Name 使用不同类型的列,因此我使用的是 TemplateColumn。在数据模板中,我有一个带有默认值 ContentTemplateContentControl 和一个 DataTrigger,如果 Type 是特定值,则将 ContentTemplate 设置为不同的列样式. 我正在将 TemplateColumn 的所有四个模板(ItemTemplateEditorTemplateAddNewRowItemTemplateAddNewRowEditorTemplate)设置到此数据模板。

ItemTemplateAddNewRowItemTemplateAddNewRowEditorTemplate 按预期工作,但是 EditorTemplate 没有,请参阅附图:

这是我的代码:

MainWindow.xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ig="http://schemas.infragistics.com/xaml"
        Width="640" Height="480" >
    <Window.Resources>
        <DataTemplate x:Key="EditorTemplate">
            <TextBox Width="64"/>
        </DataTemplate>
        <DataTemplate x:Key="BoolEditorTemplate">
            <CheckBox/>
        </DataTemplate>
        <DataTemplate x:Key="DataTemplate">
            <ContentControl Content="{Binding }">
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Setter Property="ContentTemplate" Value="{StaticResource EditorTemplate}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Type}" Value="bool">
                                <Setter Property="ContentTemplate" Value="{StaticResource BoolEditorTemplate}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>
    </Window.Resources>
    <ig:XamGrid ItemsSource="{Binding DataCollection, RelativeSource={RelativeSource AncestorType=Window}}"
                AutoGenerateColumns="False">
        <ig:XamGrid.EditingSettings>
            <ig:EditingSettings AllowEditing="Row" />
        </ig:XamGrid.EditingSettings>
        <ig:XamGrid.AddNewRowSettings>
            <ig:AddNewRowSettings AllowAddNewRow="Top" />
        </ig:XamGrid.AddNewRowSettings>

        <ig:XamGrid.Columns>
            <ig:TemplateColumn Key="Name"
                               ItemTemplate="{StaticResource DataTemplate}"
                               AddNewRowItemTemplate="{StaticResource DataTemplate}"
                               EditorTemplate="{StaticResource DataTemplate}"
                               AddNewRowEditorTemplate="{StaticResource DataTemplate}"/>
            <ig:TextColumn Key="Type"/>
        </ig:XamGrid.Columns>
    </ig:XamGrid>
</Window>

MainWindow.xaml.cs:

using System.Collections.ObjectModel;

namespace WpfApplication1
{
  public partial class MainWindow
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    public ObservableCollection<Data> DataCollection { get; } = new ObservableCollection<Data>
    {
      new Data { Name = "Foo", Type = "bool" },
      new Data { Name = "Bar", Type = "enum" }
    };
  }

  public class Data
  {
    public string Name { get; set; }
    public string Type { get; set; }
  }
}

here on the infragistics forum 所述,对于此用例,不仅需要 EditorTemplate,还需要 EditorStyle

<Style x:Key="EditorStyle" TargetType="{x:Type ContentControl}">
    <Setter Property="ContentTemplate" Value="{StaticResource EditorTemplate}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Type}" Value="bool">
            <Setter Property="ContentTemplate" Value="{StaticResource BoolEditorTemplate}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

<DataTemplate x:Key="DataTemplate">
    <ContentControl Content="{Binding }"
                    Style="{StaticResource EditorStyle}" />>
</DataTemplate>

[...]

<ig:TemplateColumn Key="Name"
                   ItemTemplate="{StaticResource DataTemplate}"
                   AddNewRowItemTemplate="{StaticResource DataTemplate}"
                   EditorTemplate="{StaticResource DataTemplate}"
                   AddNewRowEditorTemplate="{StaticResource DataTemplate}"
                   EditorStyle="{StaticResource EditorStyle}" />