0

我正在使用 Windows Azure 移动服务创建一个 Windows Phone 8 应用程序 (c#) 来存储我的数据。我从 azure 下载的示例如下:

public class TodoItem
{
    public string Id { get; set; }

    [JsonProperty(PropertyName = "text")]
    public string Text { get; set; }

    [JsonProperty(PropertyName = "complete")]
    public bool Complete { get; set; }
}


public class FVItemData
{
    private MobileServiceCollection<Entity.FV_Person, Entity.FV_Person> items;
    private IMobileServiceTable<Entity.FV_Person> FVTable = App.MobileService.GetTable<Entity.FV_Person>();

    public async void InsertTodoItem(Entity.FV_Person fvItem)
    {
        await FVTable.InsertAsync(fvItem);
        items.Add(fvItem);
    }
}

但是现在我已经创建了一个名为 InsertClass.cs 的新 cs 文件。我想将类 FVItemData 移动到 InsertClass.cs。我尝试了以下方法:

插入类.cs

namespace GetStartedWithData.ViewModel
{
    public class FVItemData
    {
        private MobileServiceCollection<FV_Person, FV_Person> items;
        private IMobileServiceTable<FV_Person> FVTable = App.MobileService.GetTable<FV_Person>();

        private async void InsertTodoItem(FV_Person fvItem)
        {
            await FVTable.InsertAsync(fvItem);
            items.Add(fvItem);
        }
    }
}

MainPage.xaml.cs

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
     var FVItem = new FV_Person { Text = InputText.Text };
     FVItemData.InsertPerson(FVItem); <--- I try this but error!
}

如何从 MainPage.xaml.cs 调用 InsertClass.cs 中的 InsertTodoItem 函数?请帮忙,我一整天都在尝试,一无所获。我是 C# 新手。谢谢...

更新:

我已经修改了问题,但我的错误有相同的行,错误消息是“'GetStartedWithData.ViewModel.FVItemData'不包含'InsertPerson'的定义”

4

3 回答 3

2

你的代码有几个问题:

构建问题

您正在尝试FVItemData.InsertTodoItem通过直接使用类名来访问实例方法 ( )。实例方法需要通过实例(即该类的对象)来访问。您可以创建一个实例,FVItemData然后调用InsertTodoItem

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    var FVItem = new FV_Person { Text = InputText.Text };
    var fvItemData = new FVItemData();
    fvItemData.InsertPerson(FVItem);
}

或者您可以将其设为静态方法,您可以通过类本身访问该方法 - 请注意,您可能还需要创建FVTable字段static.:

public class FVItemData
{
    //...

    private async void InsertTodoItem(FV_Person fvItem)
    {
        await FVTable.InsertAsync(fvItem);
        items.Add(fvItem);
    }
}

运行时问题

修复构建问题后,您可能会NullReferenceException调用到items.Add(fvItem)- 因为项目未初始化,所以它将为空。您使用 aMobileServiceCollection<T1,T2>作为items字段的类型,但仅当您使用带有某些 UI 控件的数据绑定时才应使用该类型 - 并且您也不应该直接将项目插入到集合中。您可能需要一个简单List<FVPerson>的东西,它可以在您插入物品时容纳它们。

于 2013-07-08T17:24:36.387 回答
0

一个明显的问题是,您是否在 WAMS 中创建了 FIRST 表?您不必添加列,这在您插入第一条记录时完成。

所以检查表是在插入数据之前创建的(表不是自动创建的)

于 2013-07-08T13:02:08.440 回答
0

您应该更改MainPage.xaml.cs以使用 FV_Person 类而不是 TodoItem 类

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    var FVItem= new FV_Person { attributes };
    FVItemData.InsertPerson(FVItem);
}

另外为了使事情更清楚,您还应该更改InsertClass.cs上的方法

public class FVItemData
{
    private MobileServiceCollection<FV_Person, FV_Person> items;
    private IMobileServiceTable<FV_Person> FVTable = App.MobileService.GetTable<FV_Person>();

    private async void InsertPerson(FV_Person fvItem)
    {
        await FVTable.InsertAsync(fvItem);
        items.Add(fvItem);
    }
}
于 2013-07-05T18:29:10.040 回答