2016-08-08 88 views
0

Ich binde eine TreeNode-Elementliste an eine Strukturansicht. Ich bin nicht in der Lage, an den DataTemplate TextBlock die Foreground-Farbe zu binden.Kann keine Vordergrundfarbe für ein TreeView-DataTemplate-TextBlock (MVVM) festlegen

In der ersten Zeit habe ich gelernt, es ist ein bindendes Problem, also habe ich versucht, es manuell eine Farbe zu geben, nämlich Foreground="Red", aber ich dachte, auch so ändert es nicht meine Textfarbe.

XAML:

<TreeView ItemsSource="{Binding TreeViewNodesPLCCode}" > 
     <TreeView.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
        <TextBlock Text="{Binding Name}" Foreground="{Binding Path=MachineObject.Color}"/> 
        </Grid> 
       </DataTemplate> 
      </TreeView.ItemTemplate> 
    </TreeView> 

Code:

TreeViewNodesPLCCode=new ObservableCollection<TreeNode>() 

public class TreeNode: TreeViewItem 
    { 
     public string Name{ get; set; } 
     public Machine MachineObject { get; set; } 
    } 
    public class Machine 
    { 
     public Int32 ID { get; set; } 
     public Brush Color { get; set; } 
    } 

Antwort

1

Wenn ich Ihren Code versuchen, erhalte ich die folgende Ausgabe in Visual Studio:

ItemTemplate und ItemTemplateSelector nach Artikeln ignoriert werden bereits von der Containertyp ItemsControl; Typ = ‚TreeNode‘

Dies bedeutet, dass Sie in den TreeView Elemente hinzufügen, die direkt ohne DataTemplate hinzugefügt werden können.

DataTemplate werden gemacht, um Datenobjekte (d. H. Ihre Geschäftsobjekte) zu visualisieren. TreeViewItem haben bereits eine DataTemplate.

Ihr Problem zu lösen, entfernen Sie das Erbe TreeViewItem für Ihre Klasse TreeNode:

public class TreeNode 
    { 
     public string Name{ get; set; } 
     public Machine MachineObject { get; set; } 
    } 
+0

Wenn ich das Erbe entferne ich meinen Baum nicht programmatisch erstellen können TreeViewItem. –

+0

Vielen Dank jetzt verstehe ich, wenn ich einen TreeNode erstellen, kann ich einfach die Farbe dort festlegen, muss nicht binden. –

+0

Ich kenne Ihre Spezifikationen nicht, aber die Bindung funktioniert gut mit dem von Ihnen bereitgestellten Code, solange die Vererbung zu "TreeViewItem" weg ist. Fühlen Sie sich frei, diese Antwort zu akzeptieren, indem Sie auf das graue Häkchen klicken, es kann für andere Benutzer nützlich sein;) – Slyvain