2016-05-11 2 views
1

ich:Warum die Eigenschaft der tatsächlichen Klasse in ObservableCollection für DataGridTextcolumn nicht gefunden wird, aber die Elternklasseneigenschaft ist?

System.Windows.Data Error: 40 : BindingExpression path error: 'State' property not found on 'object' ''PointNetObject' (HashCode=9270846)'. BindingExpression:Path=State; DataItem='PointNetObject' (HashCode=9270846); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

für eine Spalte. Alle Zeilen werden zur Tabelle hinzugefügt, aber für jede Zeile erhalte ich den Fehler. Zwei weitere Spalten werden für jede Zeile gut angezeigt. Aber nicht der Staat. Natürlich wird der Konverter nie aufgerufen.

Einrichtung wie unten beschrieben.

Ich habe ein Objekt:

public class PointNetObject : NetObject 
{ 
    SwitchObjectState State 
    { 
     get { return _state; } 
     set { _state = value; } 
    } 
} 

die Klasse erbt, die Eigenschaften wie Phase hat und Beschriften

In Ansichtsmodell:

public ObservableCollection<PointNetObject> SelectedSwitchItems { get; private set; } 

public SelectedObjectsViewModel(SelectedObjects selectedObjects) 
{ 
    SelectedSwitchItems = new ObservableCollection<PointNetObject>(GetSwitches()); 
}  


IEnumerable<PointNetObject> GetSwitches() 
{ 
    foreach (var netObject in SelectedObjectsInstance.GetSelectedObjectItems(x => IsSwitch(x))) 
    { 
     yield return (PointNetObject) netObject; 
    } 
} 

in Aussicht:

<DataGrid Name="SelectedSwitchesGrid" CanUserAddRows="False" CanUserResizeColumns="True" CanUserSortColumns="True" IsReadOnly="True" 
        ItemsSource="{Binding SelectedSwitchItems}" 
      <DataGrid.Columns> 
        <DataGridTextColumn Header="{DynamicResource XpStrLabel}" Binding="{Binding Label}" /> 
        <DataGridTextColumn Header="{DynamicResource XpStrPhase}" Binding="{Binding Phase}" /> 
        <DataGridTextColumn Header="{DynamicResource XpStrState}" Binding="{Binding State, Converter={StaticResource SwitchObjectStateToStringConverter}}" /> 
       </DataGrid.Columns> 
    </DataGrid> 
+2

gut Ihre 'SwitchObjectState State' Eigenschaft ist nicht' public', was ziemlich wichtig ist. – Jonesopolis

+1

danke, ich bin ein Idiot –

+0

@Jonesopolis: Care asnwer schreiben, damit ich es akzeptieren kann? –

Antwort

0

In deinem Modell:

public class PointNetObject : NetObject 
{ 
    SwitchObjectState State 
    { 
     get { return _state; } 
     set { _state = value; } 
    } 
} 

Sie State Eigenschaft wird nicht als öffentlich deklariert.

Alle Eigenschaften, an die Sie vom ViewModel an die View binden, müssen öffentlich sein, oder die View kann sie nicht sehen.

Keine Sorge, wir haben es alle einmal gemacht.

+1

Vielleicht möchten Sie die State-Eigenschaft in Ihrer Antwort veröffentlichen:/ – Will

+0

Nun, ich habe darauf hingewiesen, dass dies das Problemgebiet ist, vielleicht macht es jetzt mehr Sinn – Jonesopolis

+0

Es ist seltsam. Normalerweise enthält eine Antwort eine feste Version des OP-Codes, nicht den exakt gleichen Code mit einer Beschreibung, warum es falsch ist. Wie auch immer, nachdem ich meine unerwünschte Meinung gegeben habe, nehme ich Abschied. Guten Tag der Herr. – Will