我的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; }
}
}
答案 0 :(得分:0)
在你的foreach中你应该使用其他名称而不是Group,因为它与类的名称冲突。小写组可以工作。
答案 1 :(得分:0)
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 + "\r\n");
}
}
我将循环变量Group
更改为小写group
。我将第二个循环变量Item
也更改为小写,这在您的情况下是不必要的,但更好地符合C# naming conventions。