CS0120非静态字段,方法或属性' Group.Title'需要对象引用。

时间:2017-12-16 16:07:53

标签: c# uwp json.net

我的UWP应用程序出现问题并创建了一个收藏页面,允许用户重新排序并保存页面上的数据。我两次都得到同样的错误

  

CS0120非静态字段,方法或属性' Group.Title'需要对象引用。

     

CS0120非静态字段,方法或属性需要对象引用Group.Items'

任何人都可以向我解释为什么会这样, 感谢。

CS档案

using App1.Common;
using App1.Data;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Windows.Storage;
using Windows.UI.Popups;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using System.Linq;
using System.Threading.Tasks;
using Windows.Data.Json;


namespace App1
{

public sealed partial class test : Page
{
    public ObservableCollection<ItemData> Items { get; set; }

    private ObservableDictionary defaultViewModel = new 
    ObservableDictionary();
    private NavigationHelper navigationHelper;
    private RootObject jsonLines;
    private StorageFile fileFavourites;
    private Dictionary<string, ItemData> ItemData = new Dictionary<string, 
    ItemData>();


    public test()
    {
    loadJson();
    getFavoritesFile();

    this.InitializeComponent();
    this.navigationHelper = new NavigationHelper(this);
    this.navigationHelper.LoadState += navigationHelper_LoadState;
    }

    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 itemId = ((SampleDataItem)e.ClickedItem).UniqueId;
        this.Frame.Navigate(typeof(GroupedItemsPage), itemId);
    }

    private void setupObservableCollection()
        {
            Items = new ObservableCollection<ItemData>(ItemData.Values);
            itemGridView.ItemsSource = Items;
        }

        private async void loadJson()
        {
            var file = await StorageFile.GetFileFromApplicationUriAsync(new 
            Uri("ms-appx:///DataModel/SampleData.json"));
            var lines = await FileIO.ReadTextAsync(file);
            jsonLines = JsonConvert.DeserializeObject<RootObject>(lines);
            feedItems();
        }

        private async void getFavoritesFile()
        {
            Windows.Storage.StorageFolder storageFolder = 
            Windows.Storage.ApplicationData.Current.LocalFolder;
            fileFavourites = await storageFolder.GetFileAsync("Fav.txt");
        }

        private async void feedItems()
        {
            if (await FileIO.ReadTextAsync(fileFavourites) != "")
            {
                foreach (var line in await 
                FileIO.ReadLinesAsync(fileFavourites))
                {
                    foreach (var Group in jsonLines.Groups)
                    {
                    foreach (var Item in Group.Items)
                    {
                        if (Item.UniqueId == line)
                        {
                            var storage = new ItemData()
                            {
                                Title = Item.Title,
                                UniqueID = Item.UniqueId,
                                ImagePath = Item.ImagePath,
                                Group = Group.Title
                            };
                            ItemData.Add(storage.UniqueID, storage);
                        }
                    }
                }
                }
            }
            else
            {//if favourites file is empty, use?
            foreach (var Group in jsonLines.Groups) ;
            {
                foreach (var Item in Group.Items)
                {
                    var storage = new ItemData()
                    {
                        Title = Item.Title,
                        UniqueID = Item.UniqueId,
                        ImagePath = Item.ImagePath,
                        Group = Group.Title
                    };
                    ItemData.Add(storage.UniqueID, storage);
                    await FileIO.AppendTextAsync(fileFavourites, 
                    Item.UniqueId + "\r\n");
                }
            }
        }


        setupObservableCollection();
        }


        public ObservableDictionary DefaultViewModel
        {
            get { return this.defaultViewModel; }
        }

        #region NavigationHelper loader

        public NavigationHelper NavigationHelper
        {
            get { return this.navigationHelper; }
        }

        private async void MessageBox(string Message)
        {
            MessageDialog dialog = new MessageDialog(Message);
            await dialog.ShowAsync();
        }

        private async void navigationHelper_LoadState(object sender, 
        LoadStateEventArgs e)
        {
            var sampleDataGroups = await SampleDataSource.GetGroupsAsync();
            this.defaultViewModel["Groups"] = sampleDataGroups;
        }

        #endregion NavigationHelper loader

        #region NavigationHelper registration

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            navigationHelper.OnNavigatedFrom(e);
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            navigationHelper.OnNavigatedTo(e);
        }

        #endregion NavigationHelper registration
    }

    public class ItemData
    {
        public string UniqueID { get; set; }
        public string Title { get; set; }
        public string Group { get; set; }
        public string ImagePath { get; set; }
    }

}

RootObject文件

using App1.Data;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace App1
{

public class Item
{
    public string UniqueId { get; set; }
    public string Title { get; set; }
    public string Subtitle { get; set; }
    public string ImagePath { get; set; }
    public string Description { get; set; }
    public string Content { get; set; }
}

public class Group
{
    public string UniqueId { get; set; }
    public string Title { get; set; }
    public string Subtitle { get; set; }
    public string ImagePath { get; set; }
    public string Description { get; set; }
    public List<Item> Items { get; set; }
}

public class RootObject
{
    public List<Group> Groups { get; set; }
}  
}

2 个答案:

答案 0 :(得分:0)

在你的foreach中你应该使用其他名称而不是Group,因为它与类的名称冲突。小写组可以工作。

答案 1 :(得分:0)

foreach循环中出现问题。实际上,有两个问题:

  1. 您使用Group作为迭代变量,这是可能的,但会导致与类名Group混淆。
  2. 在实例化new ItemData时,您突然使用Group.Title代替Item.Title
  3. 因此循环的更正版本可能如下所示:

    foreach (var group in jsonLines.Groups) ;
    {
        foreach (var item in group.Items)
        {
            var storage = new ItemData()
            {
                Title = item.Title,
                UniqueID = item.UniqueId,
                ImagePath = item.ImagePath,
                Group = item.Title
             };
             ItemData.Add(storage.UniqueID, storage);
             await FileIO.AppendTextAsync(fileFavourites, 
                    Item.UniqueId + "\r\n");
         }
     }
    

    我将循环变量Group更改为小写group。我将第二个循环变量Item也更改为小写,这在您的情况下是不必要的,但更好地符合C# naming conventions