InvalidCastException при доступе к ListBox из codebehind - PullRequest
0 голосов
/ 19 марта 2012

У меня есть список со следующим xaml, который заполняется из XMLReader

<ListBox Name="listBox4" Height="498" SelectionChanged="listBox4_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Epon}" FontSize="32"/>
                <TextBlock Text="{Binding Telnum}" FontSize="24" />
                <TextBlock Text="{Binding Beruf}" FontSize="16" />
                <TextBlock Text="{Binding Odos}" FontSize="16"/>
                <TextBlock Text="{Binding Location}" FontSize="16"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Я хочу позвонить по телефону, когда я выберу элемент lisbox, поэтому я создал следующий класс

public class PhoneList
{
    public string Epon { get; set; }
    public string Telnum { get; set; }
    public string Beruf { get; set; }
    public string Odos { get; set; }
    public string Location { get; set; }

    public PhoneList(string Telnum, string Epon, string Beruf, string Odos, string Location)
    {
        this.Telnum = Telnum;
        this.Epon = Epon;
        this.Beruf = Beruf;
        this.Odos = Odos;
        this.Location = Location;
    }
}

В случае выбора, который ниже

private void listBox4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    PhoneList nPhone = (PhoneList)listBox4.SelectedItem;
    string mPhoneCopy = nPhone.Telnum;
    string mNameCopy = nPhone.Epon;

    var pt = new PhoneCallTask();
    pt.DisplayName = mNameCopy;
    pt.PhoneNumber = mPhoneCopy;
    pt.Show();
}

Я получаю ошибку InvalidCastException в первой строке события.

Что вызывает эту ошибку?

1 Ответ

0 голосов
/ 08 мая 2012

Из опубликованного XAML нет коллекции, связанной с ListBox. Это либо означает, что привязка отсутствует, либо привязка устанавливается в коде позади. Следующее - просто выстрелы в темноте, так как никакого дополнительного кода не было отправлено:

Правильно привязать ListBox

Предполагая, что коллекция является частью DataContext, коллекция должна быть привязана к ListBox:

<ListBox ItemsSource="{Binding Path=MyCollection}"... />

Начальный ресурс: MSDN: Как: привязать к коллекции и отобразить информацию на основе выбора

Проверка объекта перед сотворением

Это может быть случай, когда выбранный элемент пуст, т. Е. Первый элемент в списке не имеет значения. В этом случае проверьте, соответствует ли объект ожидаемому типу, прежде чем делать что-либо еще:

private void listBox4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  var nPhone = listBox4.SelectedItem as PhoneList;
  if (nPhone == null)
  {
    return;
  }

  string mPhoneCopy = nPhone.Telnum;
  string mNameCopy = nPhone.Epon;

  var pt = new PhoneCallTask();
  pt.DisplayName = mNameCopy;
  pt.PhoneNumber = mPhoneCopy;
  pt.Show();
}

Другие мысли

Я подозреваю, что не может быть коллекции, связанной с ListBox`; возможно, должен быть какой-то код для установки привязки, которая не выполняется?

В конце концов, если ничего из вышеперечисленного не применимо к вашему случаю, отредактируйте сообщение с соответствующим кодом, который создает коллекцию, и установите коллекцию как ItemsSource в ListBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...