2017-05-30 2 views
0

Ich habe ein XamGrid mit zwei Spalten, Name und Type. Abhängig von Type, möchte ich eine andere Art von Spalte für Name haben, also verwende ich eine TemplateColumn. In der Datenvorlage habe ich einen ContentControl mit einem Standard ContentTemplate und einen DataTrigger, der den ContentTemplate auf einen anderen Spaltenstil setzt, wenn Type ein bestimmter Wert ist. Ich setze alle vier Vorlagen (ItemTemplate, , AddNewRowItemTemplate, AddNewRowEditorTemplate) von TemplateColumn auf diese Datenvorlage.EditorTemplate für TemplateColumn in XamGrid funktioniert nicht

ItemTemplate, AddNewRowItemTemplate und AddNewRowEditorTemplate Arbeit wie vorgesehen, aber EditorTemplate nicht, siehe beigefügte Bilder:

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

<code>AddNewRowEditorTemplate</code>

<code>EditorTemplate</code>

Hier sind mein 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; } 
    } 
} 

Antwort

0

Wie erklärt here on the infragistics forum, für diesen Anwendungsfall nicht nur ein EditorTemplate ist erforderlich, sondern auch ein 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}" /> 
Verwandte Themen