2016-05-26 2 views
0

Я ударил блокпост с данными привязки к ComboBox. Я разрабатываю приложение в Windows Phone 8.1, и просто все, что я хочу сделать, это список принтеров в ComboBox.Данные привязки к ComboBox

Это моя 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> 

Это класс, который заполнит список. Данные возвращаются как Id|Name|Id|Name|Id|Name etc, поэтому есть Split и оператор For[...]Next. Этот бит кода заполняет класс и добавляет его в список. В конце я остался со списком 54 принтеров:

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 

Этот бит кода присваивает List(Of Printer) к 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 

Когда я запустить приложение и прийти к этой странице код работает ОК, но я остался с тем, что выглядит как 54 пустых опций для выбора.

ответ

0

С помощью Zaggler и после изучения трассировки стека:

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'.`

я немного изменил класс, так что Id и Name теперь Properties:

Public Property Id As Integer 
Public Property Name As String 

Я установить DisplayMemberPath и SelectedValuePath как предложено Zaggler:

Protected Overrides Async Sub OnNavigatedTo(e As NavigationEventArgs) 

    _Printer = New Printer 

    _Printers = _Printer.Populate(Await GetPrinterList()) 

    If _Printers.Count > 0 Then 
     cbxPrinters.ItemsSource = _Printers 
     cbxPrinters.DisplayMemberPath = "Id" 
     cbxPrinters.SelectedValuePath = "Name" 
    End If 

End Sub 

Я также удалил эту часть XAML:

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

Оставив XMAL глядя, как это:

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

Это зафиксировал мою проблему, и теперь принтеры теперь перечислены в ComboBox.

Смежные вопросы