从codeehind访问ListBox时出现InvalidCastException

本文关键字:InvalidCastException ListBox codeehind 访问 | 更新日期: 2023-09-27 18:28:21

我有一个列表框,其中包含从XMLReader 填充的以下xaml

<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

导致此错误的原因是什么?

从codeehind访问ListBox时出现InvalidCastException

从发布的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 `;也许应该有一些代码来设置未执行的绑定?

最后,如果以上任何一项都不适用于您的案例,请使用创建集合并将集合设置为ListBox的ItemsSource的相关代码编辑帖子。

相关文章:
  • 没有找到相关文章