2016-05-06 35 views
1

Ich habe Schwierigkeiten, eine Zelle Hintergrundfarbe basierend auf einem Unbound-Feld (mit nicht-einfachen Backend-Struktur) unter Struktur zu ändern. Hier ist die Probe „Komplex“ Struktur:WPF ändern Zelle Hintergrundfarbe basierend auf Inhalt

public class TestTable 
{ 
    public int order { get; set; } 
    public TestMember t1 { get; set; } 
    public TestMember t2 { get; set; } 
    public TestMember t3 { get; set; } 
} 

public class TestMember 
{ 
    public TestMember(String i) 
    { 
     value = i; 
    } 

    public String value { get; set; } 

} 

und das ist das XAML:

<igDP:XamDataGrid Name="xamDataGrid1"> 

     <igDP:XamDataGrid.ViewSettings> 
      <igDP:GridViewSettings UseNestedPanels="False"/> 
     </igDP:XamDataGrid.ViewSettings> 

     <igDP:XamDataGrid.FieldSettings> 
      <igDP:FieldSettings AllowRecordFiltering="true" FilterLabelIconDropDownType="MultiSelectExcelStyle" 
                 AllowEdit="False" AllowFixing="No" AllowSummaries="True"/> 
     </igDP:XamDataGrid.FieldSettings> 

     <igDP:XamDataGrid.FieldLayoutSettings> 
      <igDP:FieldLayoutSettings AutoGenerateFields="False" FilterUIType="LabelIcons" 
                   HeaderPrefixAreaDisplayMode="FieldChooserButton" AllowClipboardOperations="All" 
                   CopyFieldLabelsToClipboard="True" AddNewRecordLocation="OnTopFixed" 
                   AllowAddNew="False" HighlightAlternateRecords="False" ExpansionIndicatorDisplayMode="Never" 
              /> 
     </igDP:XamDataGrid.FieldLayoutSettings> 
     <igDP:XamDataGrid.FieldLayouts> 
      <igDP:FieldLayout Key="Layout0"> 
       <igDP:FieldLayout.SortedFields> 
        <igDP:FieldSortDescription FieldName="order" Direction="Ascending"></igDP:FieldSortDescription> 
       </igDP:FieldLayout.SortedFields> 
       <igDP:FieldLayout.Fields> 
        <igDP:Field Name="order" Label="Ordinamento" AllowGroupBy="False" Visibility="Collapsed" FixedLocation="FixedToNearEdge"/> 
        <igDP:UnboundField BindingMode="TwoWay" BindingPath="t1.value" Name="value" AllowEdit="True" Label="Anno Recoil" AllowGroupBy="False" FixedLocation="FixedToNearEdge"/> 
        <igDP:UnboundField BindingMode="TwoWay" BindingPath="t2.value" Name="value" AllowEdit="True" Label="APC" FixedLocation="FixedToNearEdge"/> 
        <igDP:UnboundField BindingMode="TwoWay" BindingPath="t3.value" Name="value" Label="R1" AllowEdit="True" FixedLocation="FixedToNearEdge"/> 
       </igDP:FieldLayout.Fields> 
      </igDP:FieldLayout> 
     </igDP:XamDataGrid.FieldLayouts> 

    </igDP:XamDataGrid> 

Was ich ein farbiges Gitter bekommen möchten, dass die Zellen sind schwarz nur, wenn der Wurzelwert ist null, nicht wenn der Blattwert null ist. Colored XamDataGrid

Das angezeigte Raster ist das Ergebnis der Generierung der zweiten Spalte Zeilen ein neues TestMember mit dem Wert auf Null festgelegt. Ich möchte, dass sie nicht schwarz gefärbt und anders behandelt werden. Ich habe müde diesen Konverter:

<igDP:XamDataGrid.Resources> 
     <Style TargetType="{x:Type igDP:CellValuePresenter}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource BackGroundConverter}"> 
         <Binding RelativeSource="{RelativeSource Self}" Path="Value" /> 
         <Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/> 
         <Binding RelativeSource="{RelativeSource Self}" /> 
         <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" /> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </igDP:XamDataGrid.Resources> 

Und was ist passiert, dass die CellValuePresenter an den Mehrwert-Umwandler geleitet kein Feld, wenn das Blatt Wert null ist, so kann ich nicht eine elegante Art und Weise finde abzurufen, in dem angebracht haben Spalte Der Wert ist null (entweder, weil root null ist oder leaf null ist) und erstellt eine Logik, um die Zelle richtig zu färben.

Vielen Dank im Voraus, hinterlassen Sie einen Kommentar, wenn ich das Problem nicht richtig erklärt habe.

Nochmals vielen Dank.

Antwort

0

ich das Problem gelöst, indem ein mehrbindigen Konverter statt der einfachen und verschiedene Stile wie folgt erklärt:

<Style TargetType="{x:Type igDP:CellValuePresenter}" x:Key="keyX"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource BackGroundConverter}"> 
         <Binding RelativeSource="{RelativeSource Self}" Path="Value" /> 
         <Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/> 
         <Binding Source="keyX"/> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Style> 

und im Inneren des multivalueconverter ich tun, um meine Kontrollen auf der Grundlage der Schlüssel übergeben. Offensichtlich in der XamDataGrid binden Sie den Stil auf das entsprechende Feld, wie folgt aus:

<igDP:UnboundField BindingMode="TwoWay" BindingPath="keyX.value" Name="value" AllowEdit="True" Label="Carica VN" FixedLocation="FixedToNearEdge"> 
     <igDP:Field.Settings> 
      <igDP:FieldSettings CellValuePresenterStyle="{StaticResource keyX}" /> 
     </igDP:Field.Settings> 
</igDP:UnboundField> 

und im MultiValueConverter Sie einen Switch-Fall auf der dritten Bindung beruht machen:

switch (columnValue) 
{ 
        case "keyX": 
         single = row.getKeyXValue(); 
         colorToApply = getStandardColor(single); 
         break; 
... 

Das ist alles. Scheint dreckig zu mir, aber da ich noch eine elegante Lösung finden muss, wird dies

funktionieren
Verwandte Themen