2016-04-18 2 views
1

Ich versuche gerade, Elemente aus einer ObservableCollection(myClass) anzuzeigen. Die Klasse selbst hat nur einige öffentliche String-Eigenschaften. Ich weiß, dass die Sammlung von einer Stream-Quelle korrekt aktualisiert wird, aber aus irgendeinem Grund aktualisiert sie nicht das Listenfeld mit den Eigenschaften, die ich möchte. Es ist sehr wahrscheinlich, dass mein XAML einen Fehler darin hat:Anzeigen von Eigenschaften einer Klasse in einer Listbox aus einer datenbankbasierten Observable-Auflistung WPF

<Window x:Class="PoSClientWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid Margin="10"> 
     <ListBox x:Name="pumpListBox" ItemsSource="{Binding PumpCollection}" Grid.IsSharedSizeScope="True"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition SharedSizeGroup="ID" /> 
          <ColumnDefinition SharedSizeGroup="State" /> 
         </Grid.ColumnDefinitions> 
         <TextBlock Margin="2" Text="{Binding pumpID}" Grid.Column="0"/> 
         <TextBlock Margin="2" Text="{Binding state}" Grid.Column="1"/> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 
</Window> 

Von der Forschung anderer Pfosten über diesen sehr Fehler. Ich habe inklusive Zugabe this.DataContext = this; meiner MainWindow sowie mit:

public ObservableCollection<PumpItem> PumpCollection 
{ 
    get { return pumpCollection; } 
} 

Um die ItemsSource, um es zu binden. Ich denke, es gibt einen Fehler bei der Deklaration der Bindungen in XAML, aber ich bin mir nicht sicher. Ich versuche, die Eigenschaften pumpID und state der Listbox aus der Klasseninstanz hinzuzufügen.

Die Klasse pumpItem ist unten dargestellt:

public enum pumpState 
{ 
    Available, 
    customerWaiting, 
    Pumping, 
    customerPaying 
}; 

public enum fuelSelection 
{ 
    Petrol, 
    Diesel, 
    LPG, 
    Hydrogen, 
    None 
}; 

public class PumpItem 
{ 
    public string pumpID; 

    public double fuelPumped; 
    public double fuelCost; 

    public fuelSelection selection; 
    public pumpState state; 

    public PumpItem(string _ID) 
    { 
     this.pumpID = _ID; 
     this.fuelPumped = 0; 
     this.fuelCost = 0; 
     this.selection = fuelSelection.None; 
     this.state = pumpState.Available;    
    } 
} 

Alle Hinweise oder Hilfe sehr geschätzt.

Antwort

1

Sie können nicht an Felder binden. Ändern Sie diese öffentliche Eigenschaften

public class PumpItem 
{ 
    private string pumpID; 
    public string PumpId 
    { 
     get 
     { 
      return pumpId; 
     } 
     set 
     { 
      pumpId = value; 
     } 
    } 

    private double fuelPumped; 
    public double FuelPumped 
    { 
     get 
     { 
      return fuelPumped; 
     } 
     set 
     { 
      fuelPumped = value; 
     } 
    } 

    private double fuelCost; 
    public double FuelCost 
    { 
     get 
     { 
      return fuelCost; 
     } 
     set 
     { 
      fuelCost= value; 
     } 
    } 

    public fuelSelection selection; 
    public fuelSelection Selection 
    { 
     get 
     { 
      return selection; 
     } 
     set 
     { 
      selection = value; 
     } 
    } 

    public pumpState state; 
    public pumpState State 
    { 
     get 
     { 
      return state; 
     } 
     set 
     { 
      state = value; 
     } 
    } 

    public PumpItem(string _ID) 
    { 
     this.PumpID = _ID; 
     this.FuelPumped = 0; 
     this.FuelCost = 0; 
     this.Selection = fuelSelection.None; 
     this.State = pumpState.Available; 
    } 
} 

XAML

<TextBlock Margin="2" Text="{Binding PumpID}" Grid.Column="0"/> 
<TextBlock Margin="2" Text="{Binding State}" Grid.Column="1"/> 

der Ausgabekonsole prüfen Bindungsfehler

+0

direkt auf das Geld mit der Antwort, nur ein paar Dinge wie Variablennamen Kapitalisierung. Z.B. in Ihrem Beispiel sollte es private String pumpId sein; um Ihre Variablennamen zu finden. Auch der PumpState-Zustand; sollte wahrscheinlich privat sein. Abgesehen davon, mehr als glücklich, als beantwortet zu markieren. Vielen Dank – James

Verwandte Themen