2016-05-26 13 views
0

Ich habe einen Roadblock mit verbindlichen Daten zu einem ComboBox getroffen. Ich entwickle eine App in Windows Phone 8.1 und alles, was ich tun möchte, ist die Liste der Drucker in der ComboBox.Daten an eine ComboBox binden

Das ist mein XAML:

<ComboBox x:Name="cbxPrinters" 
      HorizontalAlignment="Left" 
      Margin="153,150,0,0" 
      VerticalAlignment="Top" 
      Width="237"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Margin="2"> 
       <TextBlock Text="{Binding Name}"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Dies ist die Klasse, die die Liste auffüllt. Die Daten werden als Id|Name|Id|Name|Id|Name etc zurückgegeben, weshalb es eine Split und eine For[...]Next Anweisung gibt. Dieser Codeabschnitt füllt die Klasse und fügt sie der Liste hinzu. Am Ende bin ich mit einer Liste links von 54 Druckern:

Public Class Printer 

Public Id As Integer 
Public Name As String 

Public Function Populate(ByVal ResultString As String) As List(Of Printer) 

    Dim _Results As List(Of String) = ResultString.Split(New String("|")).ToList 

    Dim _Printers As New List(Of Printer) 

    If _Results.Count >= 2 Then 

     For i = 0 To _Results.Count - 1 Step 2 
      Dim _Printer As New Printer 

      With _Printer 
       .Id = _Results(i) 
       .Name = _Results(i + 1).Trim() 
      End With 

      _Printers.Add(_Printer) 
     Next 
    End If 

    Return _Printers 

End Function 

End Class 

Dieses Stück Code ordnet die List(Of Printer) zu der ComboBox:

Protected Overrides Async Sub OnNavigatedTo(e As NavigationEventArgs) 

    _Printer = New Printer 

    _Printers = _Printer.Populate(Await GetPrinterList()) 

    If _Printers.Count > 0 Then 
     cbxPrinters.ItemsSource = _Printers 
    End If 

End Sub 

Wenn ich die App und kommen auf dieser Seite starten die Code läuft OK, aber ich bin mit was aussieht wie 54 leere Optionen zur Auswahl.

Antwort

0

Mit Hilfe von Zaggler und nach dem Stack-Trace untersuchen:

Error: BindingExpression path error: 'Id' property not found on 'COACH_HOUSE_SCAN_APP.Printer, COACH HOUSE SCAN APP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.`

ich die Klasse leicht verändert, so dass Id und Name sind jetzt Properties:

Public Property Id As Integer 
Public Property Name As String 

ich gesetzt haben die DisplayMemberPath und SelectedValuePath wie von Zaggler vorgeschlagen:

Ich entfernte auch diesen Teil der XAML:

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Vertical" Margin="2"> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

die xMAL Weggehen wie folgt aussehen:

<ComboBox x:Name="cbxPrinters" 
     HorizontalAlignment="Left" 
     Margin="153,150,0,0" 
     VerticalAlignment="Top" 
     Width="237"> 
</ComboBox> 

Das hat mein Problem behoben und nun die Drucker werden nun in der ComboBox aufgeführt.