我正在开发一个应用程序,它显示有关C99标准库中各种函数头的信息。你可以想象,其中一些标题包含了不少功能......比我在主屏幕上放置的更多。我认为更好的处理方法是为每个标题创建组(有一个汇总ITEM,然后是一个包含函数ITEMS的函数GROUP),所以它们在自己的页面上。
但是,我在使用Microsoft提供的模板以编程方式执行此操作时遇到问题。
这是我对“complex.h”组的代码,它最好包含一个摘要项,然后是一个名为“ComplexConstituents”的组:
var complexGroup = new SampleDataGroup("<complex.h>",
"<complex.h>",
"complex arithmetic",
"Assets/LightGray.png",
"Group Description: ");
complexGroup.Items.Add(new SampleDataItem("Group-2-Item-1",
"Summary",
"summary of <complex.h>",
"Assets/DarkGray.png",
"Item Description: summary of <complex.h>",
ITEM_CONTENT,
complexGroup));
this.AllGroups.Add(complexGroup);
var complexConstituents = new SampleDataGroup("<complex.h> functions",
"<complex.h> functions",
"functions included in the <complex.h> header",
"Assets/MediumGray.png",
"Group description: blah");
this.ComplexConstituents.Add(complexConstituents);
你可能已经注意到我已经添加了第二种类型的组来补充“AllGroups”。它是“ComplexConstituents”,并且应该是包含组成函数的组内部。这是它的构造函数,使用“AllGroups”的构造函数进行比较:
private ObservableCollection<SampleDataGroup> _allGroups = new ObservableCollection<SampleDataGroup>();
public ObservableCollection<SampleDataGroup> AllGroups
{
get { return this._allGroups; }
}
private ObservableCollection<SampleDataGroup> _complexConstituents = new ObservableCollection<SampleDataGroup>();
public ObservableCollection<SampleDataGroup> ComplexConstituents
{
get { return this._complexConstituents; }
}
我认为这已经足够了,但无论出于何种原因,事实并非如此。我在这篇文章的末尾得到了错误(如图)。我需要做些什么来解决这个问题?
编辑:
以下是某些人要求的GetItem方法:
public static SampleDataItem GetItem(string uniqueId)
{
// Simple linear search is acceptable for small data sets
var matches = _sampleDataSource.AllGroups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
if (matches.Count() == 1) return matches.First();
return null;
}
答案 0 :(得分:0)
在您的GetItem方法中,您必须进行更改,因为您使用复杂成分作为数据源。
像这样编辑:
var matches = _sampleDataSource.ComplexConstituents.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
var matches2 = _sampleDataSource.AllGroups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));
if (matches.Count() == 1)
return matches.First();
else if(matches2.Count() == 1)
return matches2.First();
else
return null;