2017-05-30 1 views
0

J'ai un XamGrid avec deux colonnes, Name et Type. Selon Type, je veux avoir un type différent de colonne pour Name, donc j'utilise un TemplateColumn. Dans le modèle de données, j'ai un ContentControl avec un ContentTemplate par défaut et un DataTrigger qui définit le ContentTemplate à un style de colonne différent si Type est une valeur spécifique. Je mets tous les quatre modèles (ItemTemplate, EditorTemplate, AddNewRowItemTemplate, AddNewRowEditorTemplate) du TemplateColumn à ce modèle de données.EditorTemplate pour TemplateColumn dans XamGrid ne fonctionne pas

ItemTemplate, AddNewRowItemTemplate et AddNewRowEditorTemplate fonctionnent comme prévu, mais EditorTemplate n'a pas, voir ci-joint des photos:

<code>ItemTemplate</code> and <code>AddNewRowItemTemplate</code>

<code>AddNewRowEditorTemplate</code>

<code>EditorTemplate</code>

Voici mon code:

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

Répondre

0

Comme expliqué here on the infragistics forum, pour ce cas d'utilisation non seulement est un EditorTemplate nécessaire, mais aussi un 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}" />