如果在运行时单击导航菜单,我会收到两个错误?我是C#的初学者,不知道如何解决这个问题。
var group = (SampleDataGroup)e.ClickedItem;
var groupId = group.UniqueId;
var item = (SampleDataItem)e.ClickedItem;
var itemId = item.UniqueId;
InvalidCastException的:
在System.InvalidCastException中,请使用Ausnahme vom Typ“AstroApp.exe”aufgetreten,doch wurde diese im Benutzercode nicht verarbeitet。
ZusätzlicheInformationen:Das Objekt des Typs“AstroApp.Data.SampleDataItem”kann nicht in Typ“AstroApp.Data.SampleDataGroup”umgewandelt werden。
public class SampleDataItem : SampleDataGroup
{
// add flag as last param
public SampleDataItem(String uniqueId, String title, String subtitle,
String imagePath, String description, String content, SampleDataGroup group, int intIsCustomNav): base(uniqueId, title, subtitle, imagePath, description)
{
this._content = content;
this._group = group;
this.intIsCustomNav = intIsCustomNav;
}
private string _content = string.Empty;
public string Content
{
get { return this._content; }
set { this.SetProperty(ref this._content,value);}
}
private void SetProperty(ref string p, string value)
{
throw new NotImplementedException();
}
private SampleDataGroup _group;
public SampleDataGroup Group
{
get { return this._group; }
set { this.SetProperty(ref this._group,value);}
}
private void SetProperty(ref SampleDataGroup sampleDataGroup, SampleDataGroup value)
{
throw new NotImplementedException();
}
public int intIsCustomNav { get; set; }
}
/// <summary>
/// Wird aufgerufen, wenn auf ein Element innerhalb einer Gruppe geklickt wird.
/// </summary>
/// <param name="sender">GridView (oder ListView, wenn die Anwendung angedockt ist),
/// die das angeklickte Element anzeigt.</param>
/// <param name="e">Ereignisdaten, die das angeklickte Element beschreiben.</param>
void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
// Navigate to the appropriate destination page, configuring the new page
// by passing required information as a navigation parameter
var group = (SampleDataGroup)e.ClickedItem;
var groupId = group.UniqueId;
var item = (SampleDataItem)e.ClickedItem;
var itemId = item.UniqueId;
int intGroup = Convert.ToInt32(group);
// Abfrage Gruppe 1
if (intGroup == 0)
// Abfrage der Seiten
if (item.intIsCustomNav == 0)
{
// Gruppe 1, Seite 1
this.Frame.Navigate(typeof(ItemDetailPage), itemId);
}
if (item.intIsCustomNav == 1)
{
// Gruppe 1, Seite 2
this.Frame.Navigate(typeof(ItemDetailPageA2), itemId);
}
// Abfrage Gruppe 2
if (intGroup == 1)
{
// Abfrage der Seiten
if (item.intIsCustomNav == 0)
{
// Gruppe 2, Seite 1
this.Frame.Navigate(typeof(ItemDetailPageB1), itemId);
}
}
}
答案 0 :(得分:1)
这是一个无效的强制转换异常 - 换句话说,您尝试使用的东西不是您期望的类型。我注意到你将“ClickedItem”作为“SampleDataGroup”和“SampleDataItem”进行投射。除非这里有某种形式的类继承,否则这是不可能的。我建议你尝试下面的代码:
var group = e.ClickedItem as SampleDataGroup;
var groupId = group == null ? 0 : group.UniqueId;
var item = e.ClickedItem as SampleDataItem;
var itemId = item == null ? 0 : item.UniqueId;
我不知道这是否是你想要的,但它至少会消除你所看到的错误。希望有所帮助!
编辑&amp;另一个问题:
我注意到此错误后的下一行是:
// This won't work:
int intGroup = Convert.ToInt32(group);
这看起来也不会起作用。我想您将要了解有关.NET中强类型及其工作原理的更多信息。也许以下MSDN页面可以帮助您入门:http://msdn.microsoft.com/en-us/library/ms173104.aspx