2011-12-29 3 views
0

С помощью @competent_tech я смог получить, чтобы мои comboboxitems были выбраны с помощью нажатия кнопки и проанализированы через некоторый код VB, чтобы получить отображаемый документ.Как я могу устранить эту ошибку кастинга?

Казалось, все работает отлично, пока я не решил связать выпадающий в файл XML, используя следующий код:

<ComboBox Name="ComboBox1" ItemsSource="{Binding Source={StaticResource vehicleID}, XPath=//manualtype/ipck/vin}" IsReadOnly="True"></ComboBox> 

Это код, я использую на мероприятии button.click:

Try 
     Dim sFileName As String 

     If ComboBox1.SelectedValue IsNot Nothing Then 
      sFileName = DirectCast(ComboBox1.SelectedValue, ComboBoxItem).Content.ToString() 
      Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(System.IO.Path.Combine("C:\EMR", sFileName & "ipck.xps"), System.IO.FileAccess.Read) 
      DocumentViewer1.Document = theDocument.GetFixedDocumentSequence() 
     End If 
    Catch ex As Exception 
     MessageBox.Show("ERROR: " & ex.Message) 
    End Try 

Комбобокс работает нормально - отображает значения из XML-файла, однако теперь я получаю сообщение об ошибке, когда я выбираю элемент и нажимаю кнопку. В сообщении об ошибке указано: «НЕОБХОДИМО ВОЗВРАТИТЬ ОБЪЕКТ ТИПА» SYSTEM.STRING 'TO TYPE' SYSTEM.WINDOWS.CONTROLS.COMBOBOXITEM '.

Пожалуйста, помогите мне решить эту проблему, так как я хотел бы иметь возможность обновлять список ComboBoxItem через файл XML, вместо того, чтобы перекодировать с программным обеспечением каждый раз, когда я хочу, чтобы обновить список. Спасибо.

+0

Не правда ли, что SelectedValue уже является строкой? И что SelectedItem является ComboBoxItem? –

+0

Не пытаться звучать снисходительно, но потратить некоторое время, чтобы научиться использовать отладчик, действительно окупится в долгосрочной перспективе. Простое установление точек останова и использование окна просмотра помогут вам безболезненно. Так много программистов, с которыми я сталкиваюсь, ужасно отлаживаются, и это одно из самых важных навыков, которые вы можете развивать. – codeConcussion

ответ

1

Вы пытаетесь бросить ComboBox1.SelectedValue, который представляет собой строку в объект ComboBoxItem.

Я думаю, вы могли бы просто использовать:

sFileName = ComboBox1.SelectedValue 

Или ваш combobox не список имен файлов?

+0

Спасибо, что решила проблему. Ничего себе, кто-то, я, наконец, получу этот материал для кодирования. Итак, в основном, в какой ситуации будет вызываться метод DirectCast? –

+0

Вы хотите использовать кастинг, когда вам нужно изменить типы. Поэтому скажите, что у вас есть строка «1» и int 4, и вы хотите добавить их. Вам нужно будет наложить строку «1» на int 1, чтобы вы могли добавить ее в 4. Это не применимо в вашем случае здесь. – brendan

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