我对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 + "rn");
}
}
}
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; }
}
}
问题出现在您的foreach
循环中。实际上,有两个问题:
- 您将
Group
用作迭代变量,这是可能的,但会导致类名称Group
。 - 实例化
new ItemData
时,您突然使用Group.Title
而不是Item.Title
因此,循环的更正版本看起来像这样:
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 + "rn");
}
}
我将循环变量Group
更改为较低案例group
。我也将第二个循环变量Item
更改为较低案例,这在您的情况下不是必需的,但最好符合C#命名约定。
在您的foreach中,您应该使用其他名称而不是组,因为它与班级的名称冲突。小写组将起作用。