我有一个列表框,其中包含从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
。
导致此错误的原因是什么?
答案 0 :(得分:0)
从发布的XAML中,没有绑定到ListBox
的集合。这意味着没有绑定,或者在后面的代码中设置了绑定。以下只是在黑暗中拍摄,因为没有发布其他代码:
正确绑定ListBox
假设某个集合是DataContext
的一部分,则该集合需要绑定到ListBox
:
<ListBox ItemsSource="{Binding Path=MyCollection}"... />
起始资源:MSDN: How to: Bind to a Collection and Display Information Based on Selection
在投放前验证对象
这可能是所选项目为空的情况,即列表中的第一项没有值。在这种情况下,在执行任何其他操作之前,请检查对象是否是您期望的类型:
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。