C#应用网格导航 - InvalidCastException

时间:2014-03-21 17:10:49

标签: c#

如果在运行时单击导航菜单,我会收到两个错误?我是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);
            }
        }

    }

1 个答案:

答案 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